Dynamic asset management system and methods for generating interactive simulations representing assets based on automatically generated asset records

ABSTRACT

Methods and systems are provided for generating an interactive simulation representing one or more assets based on one or more asset records. Based on information from asset records stored at a database system of a cloud-based computing system, an asset simulator module, executed at a cloud-based computing system, can generate one or more simulated representations of the assets. A simulator application executed at the cloud-based computing system can augment the simulated representations of the assets with (at least) additional information from the asset records stored in the database system, and generate a user interface that presents an interactive simulation of the assets. The user interface can include the simulated representations of the assets with the additional information from the asset records stored in the database system.

CROSS-REFERENCE TO RELATED APPLICATIONS

This application is a continuation of U.S. patent application Ser. No.16/774,462, filed Jan. 28, 2020, the contents of which are herebyincorporated by reference.

TECHNICAL FIELD

Embodiments of the subject matter described herein relate generally tocloud-based computing. More particularly, embodiments of the subjectmatter relate to cloud-based computing platform having dynamic assetmanagement system and methods for tracking of assets, automaticallygenerating asset records and linking asset records to other types ofrecords, generating interactive simulations representing assets based onasset records, and generating actions in response to interaction withassets.

BACKGROUND

Today many enterprises now use cloud-based computing platforms thatallow services and data to be accessed over the Internet (or via othernetworks). Infrastructure providers of these cloud-based computingplatforms offer network-based processing systems that often supportmultiple enterprises (or tenants) using common computer hardware anddata storage. This “cloud” computing model allows applications to beprovided over a platform “as a service” supplied by the infrastructureprovider. The infrastructure provider typically abstracts the underlyinghardware and other resources used to deliver a customer-developedapplication so that the customer no longer needs to operate and supportdedicated server hardware. The cloud computing model can often providesubstantial cost savings to the customer over the life of theapplication because the customer no longer needs to provide dedicatednetwork infrastructure, electrical and temperature controls, physicalsecurity and other logistics in support of dedicated server hardware.

Multi-tenant cloud-based architectures have been developed to improvecollaboration, integration, and community-based cooperation betweencustomer tenants without compromising data security. Generally speaking,multi-tenancy refers to a system where a single hardware and softwareplatform simultaneously supports multiple organizations or tenants froma common data storage element (also referred to as a “multi-tenantdatabase”). The multi-tenant design provides a number of advantages overconventional server virtualization systems. First, the multi-tenantplatform operator can often make improvements to the platform based uponcollective information from the entire tenant community. Additionally,because all users in the multi-tenant environment execute applicationswithin a common processing space, it is relatively easy to grant or denyaccess to specific sets of data for any user within the multi-tenantplatform, thereby improving collaboration and integration betweenapplications and the data managed by the various applications. Themulti-tenant architecture therefore allows convenient and cost-effectivesharing of similar application feature software between multiple sets ofusers.

A cloud-based computing environment can include a number of differentdata centers, and each data center can include a number of instances,where each instance can support many tenants (e.g., 10,000 tenants ormore). As such, large numbers of tenants can be grouped together intoand share an instance as tenants of that instance. Each tenant is itsown organization (or org) that is identified by a unique identifier (ID)that represents that tenant's data within an instance.

Asset management within large organizations presents numerouschallenges. For example, location, use and management of assets need tobe tracked. That requires intensive time in keeping of accurate recordsregarding where assets are at a given time, who assets are with,assigned or linked to, when they can be used, who needs to be alteredregarding their usage and what levels of permission attach, what eachasset is being used for or where it is located at any given time, howthe asset is being used and why information about an asset is importantto some end user who uses or otherwise interacts with that asset, etc.Accurate record keeping and knowledge of everything about an asset canbe important to many different people throughout an organization.Maintaining asset records in a way that is easily accessible andinteractive, as well as links between asset records to other types ofrecords that are associated therewith, can present an enormous burden toend users who seek to manage, deploy, produce, or sell such assets.

BRIEF DESCRIPTION OF THE DRAWINGS

A more complete understanding of the subject matter may be derived byreferring to the detailed description and claims when considered inconjunction with the following figures, wherein like reference numbersrefer to similar elements throughout the figures.

FIG. 1 is a schematic block diagram of an example of a multi-tenantcomputing environment in which features of the disclosed embodiments canbe implemented in accordance with the disclosed embodiments.

FIG. 2 is a block diagram that illustrates a dynamic asset managementsystem for in accordance with the disclosed embodiments.

FIG. 3 is a block diagram that illustrates a dynamic asset creation andmanagement system in accordance with the disclosed embodiments.

FIG. 4 is a flow chart that illustrates an exemplary method forautomatically generating asset records and linking the asset records toother records that are stored and maintained at the database system ofthe cloud-based computing system in accordance with the disclosedembodiments.

FIG. 5 is a block diagram that illustrates an asset simulation system inaccordance with the disclosed embodiments.

FIG. 6 is a flow chart that illustrates an exemplary simulation methodfor generating simulations of assets based on asset records usingaugmented/virtual reality in accordance with the disclosed embodiments.

FIG. 7 is a block diagram that illustrates an action generator system inaccordance with the disclosed embodiments.

FIG. 8 is a flow chart that illustrates an exemplary method forgenerating or triggering actions in response to humanactivities/interactions with assets and/or asset records in accordancewith the disclosed embodiments.

FIG. 9 shows a block diagram of an example of an environment in which anon-demand database service can be used in accordance with someimplementations.

FIG. 10 shows a block diagram of example implementations of elements ofFIG. 9 and example interconnections between these elements according tosome implementations.

FIG. 11A shows a system diagram illustrating example architecturalcomponents of an on-demand database service environment according tosome implementations.

FIG. 11B shows a system diagram further illustrating examplearchitectural components of an on-demand database service environmentaccording to some implementations.

FIG. 12 illustrates a diagrammatic representation of a machine in theexemplary form of a computer system within which a set of instructions,for causing the machine to perform any one or more of the methodologiesdiscussed herein, may be executed.

DETAILED DESCRIPTION

In some cases, especially within the context of systems, like thosedescribed above, it would be desirable to provide end users with easyways to accomplish such tasks and others that are almost innumerabledepending on the context of a particular asset and it's status within anorganization. For instance, it would be desirable to provide a dynamicasset management system that can automatically help generate “assetrecords” that can help manage assets within a database system usingvarious sources of input data or information regarding those assets thatare to be managed.

Once records for assets have been created, the possibilities for usingthose automatically generated “asset records” increases. As a few,non-limiting, disclosed examples, automatically generated “assetrecords,” can be further processed to provide end users with interactivesimulations representing assets, and/or to generate automatic actions inresponse to interaction with assets that a group seeks to manage. Thesenon-limiting use cases provide a few examples of valuable userexperiences that can be provided to the end users of an organization,company, or any user within a group of users.

To address some of the challenges noted above, an application, system,method, techniques and technologies are provided.

In one embodiment, a method is provided for automatically generatingasset records that are stored and maintained at a database system of acloud-based computing system. In accordance with the method, assetinformation and data can be acquired for a plurality of assets fromsources of information and data regarding the assets or a representationof the assets. The asset information and data can be processed to detectassets and the asset information and data for each of the detectedassets can be analyzed to determine an asset type for each detectedasset. For each detected asset, based on an asset type of that detectedasset, pertinent header information for that detected asset can beextracted. The pertinent header information for each asset comprises theasset information and data for that detected asset, and associatedproperties of each detected asset. An asset record for each detectedasset can then be generated, and the generated asset records can then bestored at the database system of the cloud-based computing system. Forexample, in one implementation, the generated asset records for eachdetected asset can be stored as a row in an asset object of the databasesystem, and each asset record for each detected asset can includepertinent header information for that detected asset. In one embodiment,the assets are physical objects located at specific locations in anenvironment, and the associated properties of each detected asset caninclude a name, an identifier and a location of that detected assetwithin the environment.

In one embodiment, the method can also include determining other records(stored at and maintained by the database system) that are associatedwith each of the generated asset records, and linking, each generatedasset record to the other records that are determined to be associatedwith that generated asset record, to generate linking information thatlinks each generated asset record to one or more other records that aredetermined to be associated with that generated asset record.Optionally, as asset records change or when assets represented by assetrecords are interacted with, the linking information between assetrecords and other records can be updated. In one implementation, the oneor more other records can include, for example, other types of customrecords and standard records that are stored at the database system ofthe cloud-based computing system. To explain further, in one embodiment,the database system can include a plurality of different types ofobjects, where each object is either a type of standard object or a typeof custom object defined by the database system. There are differenttypes of standard objects and different types of custom objects. Eachstandard object includes one or more pre-defined fields that are commonfor each organization that utilizes the cloud computing platform, andeach custom object includes one or more custom fields defined by aparticular organization for that custom object. The other types ofcustom records can be stored as part of one of the custom objectsdefined by the database system of the cloud-based computing system(e.g., where each custom record in an instance of one of the customobjects), and the other types of standard records can be stored as partof one of the standard objects defined by the database system of thecloud-based computing system (e.g., where each standard record in aninstance of one of the standard objects).

The sources of the information and data can vary depending on theimplementation. For example, in one implementation, the sources of theinformation and data regarding the assets (or the representation ofassets) can include things such as an imaging device configured toacquire an image of an asset and process data to generate theinformation and data regarding the assets; a vision detection systemconfigured to acquire or extract vision detection data from anenvironment and process data to generate the information and dataregarding the assets; and/or a drone equipped with a camera configuredto acquire images of assets and process data to generate the informationand data regarding the assets. In another implementation, the sources ofthe information and data regarding the assets (or the representation ofassets) can include things such as an electronic blueprint of anenvironment that describes an asset within an environment and includesasset information and data, and/or files that describe an asset and thatinclude asset information and data. In another implementation, thesources of the information and data regarding the assets (or therepresentation of assets) can include things such as a source thatprovides information and data that identifies a three-dimensionallocation of an asset and characteristics of the asset; and/or manualconfiguration information that describes an asset including informationand data that identifies the three-dimensional location of the asset andthe characteristics of the asset. In another implementation, the sourcesof the information and data regarding the assets (or the representationof assets) can include things such as a processor configured to processdata and to generate information and data regarding the assets or therepresentation of assets. In one implementation, the data processed bythe processor can be acquired by an application programming interface(API) that is used to acquire information that describes an asset.

In one embodiment, a cloud-based computing system is provided thatincludes a database system configured to configured to maintain records,where each record is an instance of an object, and a server systemcomprising at least one hardware-based processing system. The serversystem can be used to implement a dynamic asset creation and managementsystem for automatically creating asset records that are stored andmaintained in the database system. The dynamic asset creation andmanagement system includes an asset record generator module. Whenexecuted by the at least one hardware-based processing system the assetrecord generator module is configurable to cause: acquiring, at an assetan application programming interface (API) endpoint, asset informationand data for a plurality of assets, from sources of information and dataregarding the assets or a representation of the assets; processing theasset information and data, at an asset type analysis module, to detectassets and analyzing the asset information and data for each of thedetected assets to determine an asset type for each detected asset;extracting, for each detected asset based on an asset type of thatdetected asset, pertinent header information for that detected assetthat comprises the asset information and data for that detected assetand associated properties of each detected asset; and generating anasset record for each detected asset, and storing the generated assetrecords at the database system of the cloud-based computing system. Inone embodiment, the generated asset records for each detected asset canbe stored, via an application programming interface (API), as a row inan asset object of the database system. Each asset record for eachdetected asset can include pertinent header information for thatdetected asset.

In one embodiment, the dynamic asset creation and management system canalso include an asset record linking module, that when executed by theat least one hardware-based processing system, is configurable to cause:determining other records that are associated with each of the generatedasset records, wherein the other records are stored at and maintained bythe database system of the cloud-based computing system; and linking,each generated asset record to the other records that are determined tobe associated with that generated asset record, to generate linkinginformation that links each generated asset record to one or more otherrecords that are determined to be associated with that generated assetrecord. The asset record linking module can also cause updating of thelinking information between asset records and other records (e.g., asasset records change or when assets represented by asset records areinteracted with).

In one embodiment, a system is provided. The system can include at leastone hardware-based processor and memory. The memory comprisesprocessor-executable instructions encoded on a non-transientprocessor-readable media. The processor-executable instructions, whenexecuted by the processor, are configurable to cause: acquiring, at anasset an application programming interface (API) endpoint, assetinformation and data for a plurality of assets, from sources ofinformation and data regarding the assets or a representation of theassets; processing the asset information and data to detect assets andanalyzing the asset information and data for each of the detected assetsto determine an asset type for each detected asset; extracting, for eachdetected asset based on an asset type of that detected asset, pertinentheader information for that detected asset that comprises the assetinformation and data for that detected asset and associated propertiesof each detected asset; and generating an asset record for each detectedasset; and storing, via an application programming interface (API), thegenerated asset records at a database system as a row in an asset objectof the database system. Each asset record for each detected asset caninclude pertinent header information for that detected asset.

In one embodiment, the processor-executable instructions, when executedby the processor, are further configurable to cause: determining otherrecords that are associated with each of the generated asset records,wherein the other records are stored at and maintained by the databasesystem of the cloud-based computing system; and linking, each generatedasset record to the other records that are determined to be associatedwith that generated asset record, to generate linking information thatlinks each generated asset record to one or more other records that aredetermined to be associated with that generated asset record.

In one embodiment, a method is provided for generating an interactivesimulation representing one or more assets based on one or more assetrecords. In accordance with the method, based on information from assetrecords stored at a database system of a cloud-based computing system,an asset simulator module, executed at a cloud-based computing system,can generate one or more simulated representations of the assets. Asimulator application executed at the cloud-based computing system canaugment the simulated representations of the assets with additionalinformation from the asset records stored in the database system, andgenerate a user interface that presents an interactive simulation of theassets. The user interface can include the simulated representations ofthe assets with the additional information from the asset records storedin the database system.

For example, in one embodiment, a virtual reality module of thesimulator application can generate a virtual simulation that includesthe simulated representations of the assets. In one embodiment, thevirtual reality module of the simulator application can combine realworld images with virtual images or entities that represent real-worldobjects simulated via a computer to present the user interface. In oneimplementation, the user interface can include a field of view thatpresents the virtual simulation that incorporates the simulatedrepresentations of the assets with real-world images to present virtualimages of the simulated representations of the assets.

In one embodiment, an augmented reality module of the simulatorapplication can generate a user interface that presents: an augmentedsimulation with the simulated representations of the assets along withthe additional information that supplements or augments the simulatedrepresentations of the assets. The additional information can beextracted from one or more of: the asset records stored in the databasesystem; other additional information from other records stored in thedatabase system; and one or more sources that are external to thecloud-based computing system.

In one embodiment, the user interface comprises: the simulatedrepresentations of the assets with the additional information from theasset records stored in the database system and information about otherstandard or custom records stored in the database system that have beenlinked to the asset records by an asset record linking module.

In one embodiment, the method further comprises: receiving, at thesimulator application, data regarding human activities or interactionswith assets; and processing the data regarding human activities orinteractions with assets to simulate a customer experience that presentssimulated physical representations of the assets including virtual oraugmented versions of the assets.

In one embodiment, a cloud-based computing system is provided forgenerating an interactive simulation representing one or more assetsbased on one or more asset records. The cloud-based computing system caninclude a database system configured to maintain records, where eachrecord is an instance of an object; and a server system comprising atleast one hardware-based processing system. The server system comprisesan asset record simulator module and a simulator application. The assetrecord simulator module, when executed by the at least onehardware-based processing system, is configurable to cause: generatingone or more simulated representations of the assets based on informationfrom the asset records that are stored and maintained in the databasesystem. The simulator application, when executed by the at least onehardware-based processing system, is configurable to cause: augmentingthe simulated representations of the assets with additional informationfrom the asset records stored in the database system; and generating auser interface that presents an interactive simulation of the assets.The user interface comprises: the simulated representations of theassets with the additional information from the asset records stored inthe database system.

In one embodiment, augmenting comprises generating a virtual simulationthat includes the simulated representations of the assets via a virtualreality module of the simulator application. In one implementation,generating the virtual simulation that includes the simulatedrepresentations of the assets, comprises: combining, via the virtualreality module of the simulator application, real world images withvirtual images or entities that represent real-world objects simulatedvia a computer to present the user interface. The user interface maycomprise a field of view that presents the virtual simulation thatincorporates the simulated representations of the assets with real-worldimages to present virtual images of the simulated representations of theassets.

In another embodiment, the augmenting comprises: generating, via anaugmented reality module of the simulator application, the userinterface that presents: an augmented simulation with the simulatedrepresentations of the assets along with the additional information thatsupplements or augments the simulated representations of the assets. Inone implementation, the additional information is extracted from one ormore of: the asset records stored in the database system; otheradditional information from other records stored in the database system;and one or more sources that are external to the cloud-based computingsystem.

In another embodiment, the user interface comprises the simulatedrepresentations of the assets with the additional information from theasset records stored in the database system and information about otherstandard or custom records stored in the database system that have beenlinked to the asset records by an asset record linking module.

In one embodiment, when the simulator application receives dataregarding human activities or interactions with assets, it can processthat data to simulate a customer experience that presents simulatedphysical representations of the assets including virtual or augmentedversions of the assets.

In one embodiment, a system is provided. The system can include at leastone hardware-based processor and memory. The memory comprisesprocessor-executable instructions encoded on a non-transientprocessor-readable media. The processor-executable instructions, whenexecuted by the processor, are configurable to cause: generating one ormore simulated representations of the assets based on information fromasset records stored at a database system of a cloud-based computingsystem; augmenting the simulated representations of the assets withadditional information from the asset records stored at the databasesystem; and generating a user interface that presents an interactivesimulation of the assets, wherein the user interface comprises: thesimulated representations of the assets with the additional informationfrom the asset records stored in the database system.

In one embodiment, the processor-executable instructions, when executedby the processor, are further configurable to cause: generating avirtual simulation that includes the simulated representations of theassets via a virtual reality module of the simulator application by:combining, via the virtual reality module of the simulator application,real world images with virtual images or entities that representreal-world objects simulated via a computer to present the userinterface. The user interface comprises: a field of view that presentsthe virtual simulation that incorporates the simulated representationsof the assets with real-world images to present virtual images of thesimulated representations of the assets.

In one embodiment, the processor-executable instructions, when executedby the processor, are further configurable to cause: generating, via anaugmented reality module of the simulator application, the userinterface that presents: an augmented simulation with the simulatedrepresentations of the assets along with the additional information thatsupplements or augments the simulated representations of the assets. Theadditional information can be extracted from one or more of: the assetrecords stored in the database system; and other additional informationfrom other records stored in the database system.

In another embodiment, the user interface comprises the simulatedrepresentations of the assets with the additional information from theasset records stored in the database system and information about otherstandard or custom records stored in the database system that have beenlinked to the asset records.

In another embodiment, a method is provided for generating one or moreactions in response to an interaction with an asset. An assetinteraction detector can detect an interaction with an asset, and inresponse to information that is indicative of the interaction with theasset, at least some information can be accessed from an asset record,related to the asset, from a database system of a cloud-based computingsystem. An action generator module can process the information from theasset record and the information that is indicative of the interactionwith the asset to generate at least one action in response to theinformation that is indicative of the interaction with the asset.

In one embodiment, the information from the asset record comprisesheader information, and the action generator module processes the headerinformation from the asset record and the information that is indicativeof the interaction with the asset to generate context information. Anaction engine of the action generator module then processes, usingcontextual rules, the context information and the information that isindicative of the interaction with the asset to generate the at leastone action (in response to the information that is indicative of theinteraction with the asset).

The context information can be from the database system or otherexternal sources. For instance, in some non-limiting embodiments, thecontext information comprises one or more of: customer demographics,customer type, asset type, CRM information, rules, and other data fromother external sources.

In one embodiment, the action generator module can trigger, in responseto the information that is indicative of the interaction with the asset,at least one workflow in response to that interaction. The workflow canbe an automated business process specified using any number of workflowrules, where each workflow rule causes a workflow action when designatedconditions of that workflow rule are met. For instance, a workflow canbe business logic that evaluates a record and determines if an automatedaction is to occur when the designated criteria defined by a workflowrule are satisfied.

In another embodiment, the action generator module can create, inresponse to the information that is indicative of the interaction withthe asset, at least one new record within the database system that isassociated with the asset record for the asset.

In another embodiment, the action generator module can generate, inresponse to the information that is indicative of the interaction withthe asset, a notification that indicates information about the assetbeing interacted with.

In another embodiment, the action generator module can generate based onthe asset record, in response to the information that is indicative ofthe interaction with the asset, at least one interactive user interfacethat includes information about the asset. The at least one interactiveuser interface can be displayed, for example, at a user system. Inresponse to another interaction with the at least one interactive userinterface. the action generator module can generate another action inresponse to that other interaction.

In another embodiment, the action generator module, can generate, basedon another record related to the asset record, in response to theinformation that is indicative of the interaction with the asset, atleast one interactive user interface that includes information about theasset and information from the other record. The interactive userinterface can be displayed at a user system.

In one embodiment, a cloud-based computing system is provided forgenerating one or more actions in response to an interaction with anasset. The cloud-based computing system can include a database systemand a server system. The database system is configured to store andmaintain records including an asset record for the asset, where eachrecord is an instance of an object. The server system can include atleast one hardware-based processing system. The server system caninclude an asset interaction detector, that when executed by the atleast one hardware-based processing system is configurable to cause:detecting an interaction with an asset, and in response to informationthat is indicative of the interaction with the asset, accessing at leastsome information from the asset record related to the asset from thedatabase system. The server system can include an action generatormodule, that when executed by the at least one hardware-based processingsystem, is configurable to cause: processing of the information from theasset record and the information that is indicative of the interactionwith the asset to generate at least one action in response to theinformation that is indicative of the interaction with the asset.

In one embodiment, the information from the asset record comprisesheader information, and the action generator module processes the headerinformation from the asset record and the information that is indicativeof the interaction with the asset to generate context information. Anaction engine of the action generator module can process, usingcontextual rules, the context information and the information that isindicative of the interaction with the asset to generate the at leastone action in response to the information that is indicative of theinteraction with the asset. The context information is from the databasesystem or other external sources, wherein the context informationcomprises one or more of: customer demographics, customer type, assettype, CRM information, rules, and other data from other externalsources.

For example, in one embodiment, the action generator module can trigger,in response to the information that is indicative of the interactionwith the asset, at least one workflow in response to that interaction.Workflows are described above.

In another embodiment, the action generator module can create, inresponse to the information that is indicative of the interaction withthe asset, at least one new record within the database system that isassociated with the asset record for the asset. In another embodiment,the action generator module can generate a notification that indicatesinformation about the asset being interacted with.

In another embodiment, the action generator module can generate based onthe asset record, in response to the information that is indicative ofthe interaction with the asset, at least one interactive user interfacethat includes information about the asset. The action generator modulecan also generate, in response to another interaction with the userinterface, another action in response to that other interaction.

In another embodiment, the action generator module can generate based onanother record related to the asset record, in response to theinformation that is indicative of the interaction with the asset, atleast one interactive user interface that includes information about theasset and information from the other record.

In one embodiment, a system is provided. The system can include at leastone hardware-based processor and memory. The memory comprisesprocessor-executable instructions encoded on a non-transientprocessor-readable media. The processor-executable instructions, whenexecuted by the processor, are configurable to cause:

detecting an interaction with an asset; in response to information thatis indicative of the interaction with the asset, accessing at least someinformation from an asset record related to the asset from a databasesystem of a cloud-based computing system, wherein the database system isconfigured to store and maintain records including the asset record forthe asset, wherein each record is an instance of an object; andprocessing of the information from the asset record and the informationthat is indicative of the interaction with the asset to generate atleast one action in response to the information that is indicative ofthe interaction with the asset.

Prior to describing the disclosed embodiments, some examples ofterminology that is used herein will now be described.

An organization or “org” can refer to a unique identifier (ID) thatrepresents a tenant's data within an instance. Each identifier defines avirtual or logical space provided to an individual tenant (e.g., adeployment of Salesforce with a defined set of licensed users) where allof that tenant's data and applications are stored within an instance sothat it is separate from that of all other organizations that are partof that instance. As such, each organization can be identified by itsown unique ID that allows that organization's data to be separated fromdata of other organizations. The ID serves as an access key and asecurity barrier for an individual tenant's data in the system. Anorganization can be thought of as a logical container for one cohesiveset of related data, metadata, configurations, settings and schemas thatis separate from that of all other organizations. An organizationincludes all of a tenant's data and applications, and is separate fromthat of all other organizations. Each organization can be highlycustomized with respect to other organizations that are part of the sameinstance. Each organization can have its own custom content that isunique to that particular organization. For a particular organization,custom content can include metadata and associated data that is uniqueto that particular organization. Each organization can be customizedusing custom fields, custom objects, workflows, data sharing rules,visual force pages and apex coding because even though all tenants withan instance share the same database, the organization ID is stored inevery table to ensure that every row of data is linked back to thecorrect tenant and the data from other tenants sharing the same instancecannot be mixed up.

As used herein, the term “class” can refer to a template or blueprintfrom which objects are created. An object is an instance of a class. Toexplain further, all objects have state and behavior, that is, thingsthat an object knows about itself, and things that an object can do. Aclass can contain variables and methods. Variables are used to specifythe state of an object, whereas methods are used to control behavior. Aclass can contain other classes, exception types, and initializationcode.

As used herein, the term “record” can refer to a particular occurrenceor instance of a data object that is created by a user or administratorof a database service and stored in a database system, for example,about a particular (actual or potential) business relationship orproject. An object can refer to a structure used to store data andassociated metadata along with a globally unique identifier (called anidentity field) that allows for retrieval of the object. In oneembodiment implementing a multi-tenant database, all of the records forthe tenants have an identifier stored in a common table. Each objectcomprises a number of fields. A record has data fields that are definedby the structure of the object (e.g., fields of certain data types andpurposes). An object is analogous to a database table, fields of anobject are analogous to columns of the database table, and a record isanalogous to a row in a database table. Data is stored as records of theobject, which correspond to rows in a database. The terms “object” and“entity” are used interchangeably herein. Objects not only providestructure for storing data, but can also power the interface elementsthat allow users to interact with the data, such as tabs, the layout offields on a page, and lists of related records. Objects can also havebuilt-in support for features such as access management, validation,formulas, triggers, labels, notes and attachments, a track field historyfeature, security features, etc. Attributes of an object are describedwith metadata, making it easy to create and modify records eitherthrough a visual interface or programmatically.

A record can also have custom fields defined by a user. A field can beanother record or include links thereto, thereby providing aparent-child relationship between the records. Customizations caninclude custom objects and fields, Apex Code, Visualforce, Workflow,etc.

Examples of objects include standard objects, custom objects, andexternal objects. A standard object can have a pre-defined datastructure that is defined or specified by a database service or cloudcomputing platform. A standard object can be thought of as a defaultobject. For example, in one embodiment, a standard object includes oneor more pre-defined fields that are common for each organization thatutilizes the cloud computing platform or database system or service. Alist of standard objects that are currently available from Salesforce isprovided athttps://developer.salesforce.com/docs/atlas.en-us.object_reference.meta/object_reference/sforce_api_objects_list.htm.

A few non-limiting examples of standard objects can include salesobjects (e.g., accounts, contacts, opportunities, leads, campaigns, andother related objects); task and event objects (e.g., tasks and eventsand their related objects); support objects (e.g., cases and solutionsand their related objects); salesforce knowledge objects (e.g., view andvote statistics, article versions, and other related objects); document,note, attachment objects and their related objects; user, sharing, andpermission objects (e.g., users, profiles, and roles); profile andpermission objects (e.g., users, profiles, permission sets, and relatedpermission objects); record type objects (e.g., record types andbusiness processes and their related objects); product and scheduleobjects (e.g., opportunities, products, and schedules); sharing and teamselling objects (e.g., account teams, opportunity teams, and sharingobjects); customizable forecasting objects (e.g., includes forecasts andrelated objects); forecasts objects (e.g., includes objects forcollaborative forecasts); territory management (e.g., territories andrelated objects associated with territory management); process objects(e.g., approval processes and related objects); content objects (e.g.,content and libraries and their related objects); chatter feed objects(e.g., objects related to feeds); badge and reward objects; feedback andperformance cycle objects, etc. For example, a record can be for abusiness partner or potential business partner (e.g., a client, vendor,distributor, etc.) of the user, and can include an entire company,subsidiaries, or contacts at the company. As another example, a recordcan be a project that the user is working on, such as an opportunity(e.g., a possible sale) with an existing partner, or a project that theuser is working on.

One specific type of standard object is an “asset” object. As usedherein, an asset can represent an item of commercial value, such as aproduct sold by a company or a competitor of that company. Assets can beused to store information about a customers' products (e.g., items thata company sells). Assets can represent, for instance, specific productscustomers have purchased or installed. Assets can be linked tomaintenance plans, entitlements, work orders, and more so that thehistory of an asset (e.g., a customer's product) can be assessed. Anasset object can be used to track things about a product (such asproducts sold to customers). Each asset can be associated with anaccount or contact. When an application creates a new asset record, itcan specify a name and an identifier. In one embodiment, an asset objectcan include many different fields including an “account” fieldassociated with the asset, and/or a “contact” field that indicates acontact associated with the asset (e.g., an AccountId, ContactId, orboth). As such, each asset can be associated with an account and/orcontact. An account and contact can, but do not necessarily need to be,related to and linked to each other. In one embodiment, other fields ofan asset object can include:

an “asset division” field to which the asset belongs (this value isautomatically inherited from the related account if any. Otherwise, thevalue is inherited from the related contact. Available only inorganizations that use divisions to segment their data);

an “asset level field” that indicates the asset's position in an assethierarchy (if the asset has no parent or child assets, its level is 1.Assets that belong to a hierarchy have a level of 1 for the root asset,2 for the child assets of the root asset, 3 for their children, and soforth.);

an “asset name” filed that identifies a name for the asset; an “assetowner” field that identifies an individual user to which the asset isassigned (by default, the asset owner is the user who created the assetrecord);

an “asset provided by” field that specifies the account that providedthe asset, typically a manufacturer;

an “asset serviced by” field that indicates the account in charge ofservicing the asset;

a “competitor asset” field that indicates whether the asset represents acompetitor's product (this checkbox helps track which customers areusing a competitor's products);

a “description” field that includes a description of the asset;

an “install date” field that indicates the date the asset was installed;

an “internal asset” field that indicates that the asset is produced orused internally;

a “location” field that indicates the asset's location (e.g., this canbe the place where the asset is stored, such as a warehouse or van”);

a “parent asset” field that indicates the asset's parent asset;

a “price” field that indicates the amount the customer paid for theasset;

a “product” field that indicates the product on which the asset isbased;

a “product code” field that indicates the internal code or productnumber used to identify the related product;

a “product description” field that indicates the description of therelated product;

a “product family” field that indicates the related product's category;

a “product SKU” field that indicates the stock keeping unit (SKU) of therelated product;

a “purchase date” field that indicates the date the customer bought theasset;

a “quantity” field that indicates the number of assets purchased;

a “root asset” field that indicates the top-level asset in an assethierarchy. depending on where an asset lies in the hierarchy, its rootmight be the same as its parent;

a “serial number” field that indicates the model number on the asset;

a “status” field that indicates the asset's status. this picklistcontains the following values, which can be customized: a “purchased”field, a “shipped” field, an “installed” field, a “registered” field andan “obsolete” field;

a “usage end date” field that indicates the date the asset expires orthe last date it is under warranty; and

a “use this” field to store whatever date is appropriate for yourbusiness.

Assets can also be linked through replacements and upgrades. Assets canbe related to each other. Asset hierarchies can be used to createparent-child relationships between assets to represent products withmultiple components. To create hierarchical relationships betweenassets, use the Parent Asset field and the Child Assets related list onasset detail pages. Assets also come with a few additional fieldsrelated to hierarchies. The read-only Root Asset field lists thetop-level asset in an asset hierarchy. Depending on where an asset liesin the hierarchy, its root might be the same as its parent. If an assetis at the top of a hierarchy, it is its own root asset, and the ParentAsset field is blank. The read-only Asset Level field is a number thatreflects the asset's position in a hierarchy. If the asset has no parentor child assets, its level is 1. Assets that belong to a hierarchy havea level of 1 for the root asset, 2 for the child assets of the rootasset, 3 for their children, and so forth.

When a customer's asset needs to be replaced or upgraded, thereplacement can be tracked on asset detail pages. Asset replacements canbe viewed and managed from two related lists on asset detail pages. Theprimary assets related list shows assets that replaced the currentasset. the related assets related list shows assets that the currentasset replace

For instance, with asset tracking, a client application can quicklydetermine which products were previously sold or are currently installedat a specific account. Asset tracking is also useful for productsupport, providing detailed information to assist with product-specificsupport issues. For example, the PurchaseDate or SerialNumber couldindicate whether a given product has certain maintenance requirements,including product recalls. Similarly, the UsageEndDate might indicatewhen the asset was removed from service or when a license or warrantyexpires

By contrast, a custom object can have a data structure that is defined,at least in part, by an organization or by a user/subscriber/admin of anorganization. For example, a custom object can be an object that iscustom defined by a user/subscriber/administrator of an organization,and includes one or more custom fields defined by the user or theparticular organization for that custom object. Custom objects arecustom database tables that allow an organization to store informationunique to their organization. Custom objects can extend thefunctionality that standard objects provide.

In one embodiment, an object can be a relationship management entityhaving a record type defined within platform that includes a customerrelationship management (CRM) database system for managing a company'srelationships and interactions with their customers and potentialcustomers. Examples of CRM entities can include, but are not limited to,an account, a case, an opportunity, a lead, a project, a contact, anorder, a pricebook, a product, a solution, a report, a forecast, a user,etc. For instance, an opportunity can correspond to a sales prospect,marketing project, or other business-related activity with respect towhich a user desires to collaborate with others.

External objects are objects that an organization creates that map todata stored outside the organization. External objects are like customobjects, but external object record data is stored outside theorganization. For example, data that's stored on premises in anenterprise resource planning (ERP) system can be accessed as externalobjects in real time via web service callouts, instead of copying thedata into the organization.

FIG. 1 is a schematic block diagram of an example of a multi-tenantcomputing environment in which features of the disclosed embodiments canbe implemented in accordance with the disclosed embodiments. As shown inFIG. 1 , an exemplary cloud-based solution may be implemented in thecontext of a multi-tenant system 100 including a server 102 thatsupports applications 128 based upon data 132 from a database 130 thatmay be shared between multiple tenants, organizations, or enterprises,referred to herein as a multi-tenant database. Data and servicesgenerated by the various applications 128 are provided via a network 145to any number of user systems 140, such as desktops, laptops, tablets,smartphones or other client devices, Google Glass™, and any othercomputing device implemented in an automobile, aircraft, television, orother business or consumer electronic device or system, including webclients.

Each application 128 is suitably generated at run-time (or on-demand)using a common application platform 110 that securely provides access tothe data 132 in the database 130 for each of the various tenantorganizations subscribing to the system 100. In accordance with onenon-limiting example, the service cloud 100 is implemented in the formof an on-demand multi-tenant customer relationship management (CRM)system that can support any number of authenticated users for aplurality of tenants.

As used herein, a “tenant” or an “organization” should be understood asreferring to a group of one or more users (typically employees) thatshares access to common subset of the data within the multi-tenantdatabase 130. In this regard, each tenant includes one or more usersand/or groups associated with, authorized by, or otherwise belonging tothat respective tenant. Stated another way, each respective user withinthe multi-tenant system 100 is associated with, assigned to, orotherwise belongs to a particular one of the plurality of enterprisessupported by the system 100.

Each enterprise tenant may represent a company, corporate department,business or legal organization, and/or any other entities that maintaindata for particular sets of users (such as their respective employees orcustomers) within the multi-tenant system 100. Although multiple tenantsmay share access to the server 102 and the database 130, the particulardata and services provided from the server 102 to each tenant can besecurely isolated from those provided to other tenants. The multi-tenantarchitecture therefore allows different sets of users to sharefunctionality and hardware resources without necessarily sharing any ofthe data 132 belonging to or otherwise associated with otherorganizations.

The multi-tenant database 130 may be a repository or other data storagesystem capable of storing and managing the data 132 associated with anynumber of tenant organizations. The database 130 may be implementedusing conventional database server hardware. In various embodiments, thedatabase 130 shares processing hardware 104 with the server 102. Inother embodiments, the database 130 is implemented using separatephysical and/or virtual database server hardware that communicates withthe server 102 to perform the various functions described herein.

In an exemplary embodiment, the database 130 includes a databasemanagement system or other equivalent software capable of determining anoptimal query plan for retrieving and providing a particular subset ofthe data 132 to an instance of application (or virtual application) 128in response to a query initiated or otherwise provided by an application128, as described in greater detail below. The multi-tenant database 130may alternatively be referred to herein as an on-demand database, inthat the database 130 provides (or is available to provide) data atrun-time to on-demand virtual applications 128 generated by theapplication platform 110, as described in greater detail below.

In practice, the data 132 may be organized and formatted in any mannerto support the application platform 110. In various embodiments, thedata 132 is suitably organized into a relatively small number of largedata tables to maintain a semi-amorphous “heap”-type format. The data132 can then be organized as needed for a particular virtual application128. In various embodiments, conventional data relationships areestablished using any number of pivot tables 134 that establishindexing, uniqueness, relationships between entities, and/or otheraspects of conventional database organization as desired. Further datamanipulation and report formatting is generally performed at run-timeusing a variety of metadata constructs. Metadata within a universal datadirectory (UDD) 136, for example, can be used to describe any number offorms, reports, workflows, user access privileges, business logic andother constructs that are common to multiple tenants.

Tenant-specific formatting, functions and other constructs may bemaintained as tenant-specific metadata 138 for each tenant, as desired.Rather than forcing the data 132 into an inflexible global structurethat is common to all tenants and applications, the database 130 isorganized to be relatively amorphous, with the pivot tables 134 and themetadata 138 providing additional structure on an as-needed basis. Tothat end, the application platform 110 suitably uses the pivot tables134 and/or the metadata 138 to generate “virtual” components of thevirtual applications 128 to logically obtain, process, and present therelatively amorphous data 132 from the database 130.

The server 102 may be implemented using one or more actual and/orvirtual computing systems that collectively provide the dynamicapplication platform 110 for generating the virtual applications 128.For example, the server 102 may be implemented using a cluster of actualand/or virtual servers operating in conjunction with each other,typically in association with conventional network communications,cluster management, load balancing and other features as appropriate.The server 102 operates with any sort of conventional processinghardware 104, such as a processor 105, memory 106, input/output features107 and the like. The input/output features 107 generally represent theinterface(s) to networks (e.g., to the network 145, or any other localarea, wide area or other network), mass storage, display devices, dataentry devices and/or the like.

The processor 105 may be implemented using any suitable processingsystem, such as one or more processors, controllers, microprocessors,microcontrollers, processing cores and/or other computing resourcesspread across any number of distributed or integrated systems, includingany number of “cloud-based” or other virtual systems. The memory 106represents any non-transitory short or long-term storage or othercomputer-readable media capable of storing programming instructions forexecution on the processor 105, including any sort of random accessmemory (RAM), read only memory (ROM), flash memory, magnetic or opticalmass storage, and/or the like. The computer-executable programminginstructions, when read and executed by the server 102 and/or processor105, cause the server 102 and/or processor 105 to create, generate, orotherwise facilitate the application platform 110 and/or virtualapplications 128 and perform one or more additional tasks, operations,functions, and/or processes described herein. It should be noted thatthe memory 106 represents one suitable implementation of suchcomputer-readable media, and alternatively or additionally, the server102 could receive and cooperate with external computer-readable mediathat is realized as a portable or mobile component or platform, e.g., aportable hard drive, a USB flash drive, an optical disc, or the like.

The application platform 110 is any sort of software application orother data processing engine that generates the virtual applications 128that provide data and/or services to the user systems 140. In a typicalembodiment, the application platform 110 gains access to processingresources, communications interfaces and other features of theprocessing hardware 104 using any sort of conventional or proprietaryoperating system 108. The virtual applications 128 are typicallygenerated at run-time in response to input received from the usersystems 140. For the illustrated embodiment, the application platform110 includes a bulk data processing engine 112, a query generator 114, asearch engine 116 that provides text indexing and other searchfunctionality, and a runtime application generator 120. Each of thesefeatures may be implemented as a separate process or other module, andmany equivalent embodiments could include different and/or additionalfeatures, components or other modules as desired.

The runtime application generator 120 dynamically builds and executesthe virtual applications 128 in response to specific requests receivedfrom the user systems 140. The virtual applications 128 are typicallyconstructed in accordance with the tenant-specific metadata 138, whichdescribes the particular tables, reports, interfaces and/or otherfeatures of the particular application 128. In various embodiments, eachvirtual application 128 generates dynamic web content that can be servedto a browser or other client program 142 associated with its user system140, as appropriate.

The runtime application generator 120 suitably interacts with the querygenerator 114 to efficiently obtain multi-tenant data 132 from thedatabase 130 as needed in response to input queries initiated orotherwise provided by users of the user systems 140. In a typicalembodiment, the query generator 114 considers the identity of the userrequesting a particular function (along with the user's associatedtenant), and then builds and executes queries to the database 130 usingsystem-wide metadata 136, tenant specific metadata 138, pivot tables134, and/or any other available resources. The query generator 114 inthis example therefore maintains security of the common database 130 byensuring that queries are consistent with access privileges granted tothe user and/or tenant that initiated the request.

With continued reference to FIG. 1 , the data processing engine 112performs bulk processing operations on the data 132 such as uploads ordownloads, updates, online transaction processing, and/or the like. Inmany embodiments, less urgent bulk processing of the data 132 can bescheduled to occur as processing resources become available, therebygiving priority to more urgent data processing by the query generator114, the search engine 116, the virtual applications 128, etc.

In exemplary embodiments, the application platform 110 is utilized tocreate and/or generate data-driven virtual applications 128 for thetenants that they support. Such virtual applications 128 may make use ofinterface features such as custom (or tenant-specific) screens 124,standard (or universal) screens 122 or the like. Any number of customand/or standard objects 126 may also be available for integration intotenant-developed virtual applications 128. As used herein, “custom”should be understood as meaning that a respective object or applicationis tenant-specific (e.g., only available to users associated with aparticular tenant in the multi-tenant system) or user-specific (e.g.,only available to a particular subset of users within the multi-tenantsystem), whereas “standard” or “universal” applications or objects areavailable across multiple tenants in the multi-tenant system.

The data 132 associated with each virtual application 128 is provided tothe database 130, as appropriate, and stored until it is requested or isotherwise needed, along with the metadata 138 that describes theparticular features (e.g., reports, tables, functions, objects, fields,formulas, code, etc.) of that particular virtual application 128. Forexample, a virtual application 128 may include a number of objects 126accessible to a tenant, wherein for each object 126 accessible to thetenant, information pertaining to its object type along with values forvarious fields associated with that respective object type aremaintained as metadata 138 in the database 130. In this regard, theobject type defines the structure (e.g., the formatting, functions andother constructs) of each respective object 126 and the various fieldsassociated therewith.

Still referring to FIG. 1 , the data and services provided by the server102 can be retrieved using any sort of personal computer, mobiletelephone, tablet or other network-enabled user system 140 on thenetwork 145. In an exemplary embodiment, the user system 140 includes adisplay device, such as a monitor, screen, or another conventionalelectronic display capable of graphically presenting data and/orinformation retrieved from the multi-tenant database 130, as describedin greater detail below.

Typically, the user operates a conventional browser application or otherclient program 142 executed by the user system 140 to contact the server102 via the network 145 using a networking protocol, such as thehypertext transport protocol (HTTP) or the like. The user typicallyauthenticates his or her identity to the server 102 to obtain a sessionidentifier (“SessionID”) that identifies the user in subsequentcommunications with the server 102. When the identified user requestsaccess to a virtual application 128, the runtime application generator120 suitably creates the application at run time based upon the metadata138, as appropriate. However, if a user chooses to manually upload anupdated file (through either the web-based user interface or through anAPI), it will also be shared automatically with all of the users/devicesthat are designated for sharing.

As noted above, the virtual application 128 may contain Java, ActiveX,or other content that can be presented using conventional clientsoftware running on the user system 140; other embodiments may simplyprovide dynamic web or other content that can be presented and viewed bythe user, as desired. As described in greater detail below, the querygenerator 114 suitably obtains the requested subsets of data 132 fromthe database 130 as needed to populate the tables, reports or otherfeatures of the particular virtual application 128. In variousembodiments, application 128 embodies the functionality of acollaboration solution such as the Chatter® system.

FIG. 2 is a block diagram that illustrates a dynamic asset managementsystem 200 for along with a cloud-based computing system 205 having adatabase system 206 in accordance with the disclosed embodiments. Thedynamic asset management system 200 can track assets, generate assetrecords and store them within the database system 206, link assetrecords to other types of records, generate interactive simulationsrepresenting assets based on the asset records, and generate actions inresponse to interaction with assets.

In one embodiment, the cloud-based computing system 205 is a system thatcan be shared by many different organizations, and handles the storageof, and access to, different metadata, objects and records, and data andapplications across disparate organizations. In one embodiment, thedatabase system 206 can be implemented as part of, or in conjunctionwith, a cloud-based computing system 205 including a database systemsuch as the multi-tenant database system 130 that is shown and describedabove with reference to FIG. 1 . In one embodiment, the cloud-basedcomputing system 205 can include a database system 206, such as amulti-tenant database system. The cloud-based computing system 205 isconfigured to handle requests for any user associated with anyorganization that is a tenant of the system. Although not illustrated,the cloud-based computing system 205 can include other components suchas one or more processing systems that execute applications, otherprocess spaces where other applications run, and program code that willbe described in greater detail below.

The cloud-based computing system 205 can include a connectivity engine(not illustrated in FIG. 2 ) serves as a network interface that allowsthe dynamic asset management system 200 and user systems (notillustrated in FIG. 2 ) to establish a communicative connection to thecloud-based computing system 205 over a network (not illustrated in FIG.2 ) such as the Internet or any type of network described herein. Thecloud-based computing system 205 includes an application platform thatallows user systems (not illustrated in FIG. 2 ) to access variousapplications provided by the application platform. The applicationplatform can be a cloud-based user interface.

The cloud cloud-based computing system 205 including the applicationplatform (not illustrated in FIG. 2 ) and database system(s) 206 can bepart of one backend system; however, it should be appreciated that thecloud-based computing system 205 can include other backend systems thatcan include one or more servers that work in conjunction with one ormore databases and/or data processing components. The applicationplatform can also have access to one or more other backend systems andone or more database systems 206 that store information (e.g., recordsincluding data and/or metadata) for a number of different organizationsincluding user information, organization information, custominformation, etc. The database systems 206 can include a multi-tenantdatabase system 130 as described with reference to FIG. 1 , as well asother databases or sources of information that are external to themulti-tenant database system 130 of FIG. 1 . In one embodiment, themulti-tenant database system 130 can store data in the form of recordsand customizations.

The cloud-based computing system 205 can provide applications andservices and store data for any number of organizations. Eachorganization is a source of metadata and data associated with thatmetadata that collectively make up an application. In oneimplementation, the metadata can include customized content of theorganization (e.g., customizations done to an instance that definebusiness logic and processes for an organization). Some non-limitingexamples of metadata can include, for example, customized content thatdescribes a build and functionality of objects (or tables), tabs, fields(or columns), permissions, classes, pages (e.g., Apex pages), triggers,controllers, sites, communities, workflow rules, automation rules andprocesses, etc. Data is associated with metadata to create anapplication. Data can be stored as one or more objects, where eachobject holds particular records for an organization. As such, data caninclude records (or user content) that are held by one or more objects.

The dynamic asset management system 200 can include an asset recordgenerator module 202, an asset management module 204, an asset recordlinking module 208, an asset simulator module 210, a simulatorapplication(s) 212 and an action generator module 214. Any of theelements of the dynamic asset management system 200 can be implementedas part of or externally to a system such as that shown and describedabove with reference to FIG. 1 . As such, the dynamic asset managementsystem 200 can communicate with a database system 206 that depending onthe implementation can be external to the dynamic asset managementsystem 200, or part of the dynamic asset management system 200, but isillustrated as being external to the dynamic asset management system 200in the embodiment that is illustrated in FIG. 2 .

The dynamic asset management system 200 can also communicate with one ormore information and data regarding assets 201 that are external to thedynamic asset management system 200 in the embodiment that isillustrated in FIG. 2 . The information and data regarding assets 201can represent various sources of input data or information, such as,information or data regarding assets that are to be managed by the assetmanagement module 204 and stored in the database system 206. The dynamicasset management system 200 can also communicate with one or moreexternal sources 216 that are external to the dynamic asset managementsystem 200 in the embodiment that is illustrated in FIG. 2 . Theexternal sources 216 can represent various sources of input data orinformation, such as, data indicative or reflective of user interactionswith various assets that are generated by the asset record generatormodule 202, managed by the asset management module 204 and stored in thedatabase system 206.

The asset record generator module 202 can receive (e.g., gather orcollect) asset information/data 201 regarding assets from one or moresources. In some implementations, the assets can be physical objects,and the asset information/data regarding those physical objects can beused to generate asset records corresponding to those physical objects.Depending on the implementation, the asset information/data regardingassets 201 regarding assets can be communicated or “pushed” to the assetrecord generator module 202 from various sources, or can be pulled fromvarious sources by the asset record generator module 202 (e.g.,gathered/collected by the asset record generator module 202 from varioussources). For each asset, the asset information/data from the varioussources can include any representation (e.g., images, Blueprints, XMLfiles, manual config, APIs, information extracted using vision detectiontechnologies such as drones equipped with cameras to acquireinformation/data that can then be processed to determine assetinformation/data). In one embodiment, the information and data regardingassets 201 can be acquired by an imaging device or camera (notillustrated in FIG. 2 ) that can acquire images of assets in anenvironment that can be processed via a processor or other recognitionsystem, and then used to request data that is pertinent to theinformation acquired by the imaging device (not illustrated in FIG. 2 )and processed using image recognition processing technologies andgenerate assets records.

In one implementation, the asset record generator module 202 can captureinformation/data regarding assets 201 that describes assets within anenvironment, such as a facility, inventory space or other place, byprocessing high-speed video captured by drone or other robot mountedwith cameras (as one example), and then create records within acloud-based computing system 205 (e.g., Salesforce.com) for each asset.In one implementation, a drone can include advanced optical, RFID, andbarcoding sensor technologies that can acquire information/data that canbe used to identify three-dimensional locations of assets and generateasset records that describe characteristics of assets.

In one embodiment, the asset record generator module 202 is an entity,that is external to a system such as that shown in FIG. 1 , that canprocess the asset information/data regarding assets 201 regarding assetsto generate asset records, and then provide the asset records (alongwith the information/data used to generate the asset records) to theasset management module 204, the database system 206 and/or the assetrecord linking module 208. In this embodiment, the asset recordgenerator module 202 can process the asset information/data regardingassets 201 regarding assets to generate asset records, for example, byanalyzing representations of assets to determine asset types, and then,extracting, based on an asset type of each asset, pertinent headerinformation for each asset (e.g., asset information and associatedproperties of that asset). The asset record generator module 202 canthen register each of the assets at the database system 206 via an APIby creating and storing an asset record for each asset (e.g., as a rowin an asset object of a cloud-based computing system 205 (e.g.,Salesforce.com®), where each asset record includes corresponding,pertinent header information for each asset).

In another embodiment, the asset record generator module 202 is anentity, that is external to a system such as that shown in FIG. 1 , thatcan send the asset information/data regarding assets 201 regardingassets to an asset API endpoint at the asset management module 204,which can be implemented within or internal to a system such as thatshown in FIG. 1 . The asset management module 204 can process the assetinformation/data regarding assets 201 to generate asset records that theasset API endpoint can then provide (along with the information/dataused to generate the asset records) to the database system 206 and/orthe asset record linking module 208. The asset record generator module202 can then register each of the assets at the database system 206 viaan API endpoint at the asset management module 204 to create and storean asset record for each asset (e.g., as a row in an asset object of acloud-based computing system 205 (e.g., Salesforce.com), where eachasset record includes corresponding, pertinent header information foreach asset). Once asset records are created and stored within thedatabase system 206 of the cloud-based computing system 205 they can beused for various purposes as will be described below.

The asset management module 204 can manage and track assets using theasset records. In addition to managing and tracking assets and theirassociated asset records, the asset management module 204 can also serveas an interface between the database system 206 and other blocks thatare illustrated in FIG. 2 , such as the asset record generator module202, the asset record linking module 208, the asset simulator module210, the action generator module 214, etc. Further processing of theasset information/data regarding assets 201 regarding assets can varydepending on the implementation.

The asset record linking module 208 can link asset records to othertypes of custom and/or standard records that are maintained by, andstored at, a computing platform that includes the database system 206 togenerate linking information that links each asset record to one or moreother records having any object type (including other records having anasset object type). While an asset record could be potentially becreated that is not linked to or associated with other records, in manycases, asset records that are generated can be linked to other recordsthat are maintained by the database system 206 to generate linkinginformation. The linking information for each asset record links thatasset record to other record(s) having an asset object type and/or toother record(s) having other object types that are different than theasset object type. The linking information that is output from the assetrecord linking module 208 can also be provided to and stored at databasesystem 206 for storage and can also be provided to other modules such asthe asset record generator module 202, the asset management module 204,the asset simulator module 210, the simulator application(s) 212, theaction generator module 214, etc. for use during processing performed atthose other modules.

The asset record linking module 208 can regularly update links betweenasset records and other types of records. For instance, the asset recordlinking module 208 can regularly update links between asset records andother types of records as asset records change and/or in response tointeraction with assets.

The asset simulator module 210 and the simulator application(s) 212 areillustrated as separate blocks, but can be implemented together in someimplementations. In one implementation, the asset simulator module 210is part of a separate computing platform, whereas in otherimplementations, the asset simulator module 210 is part of the samecomputing platform, such as that shown and described with reference toFIG. 1 . In one embodiment, the asset simulator module 210 can beimplemented as an application or a service provided by a system, such asthe system described above with reference to FIG. 1 . Alternatively, theasset simulator module 210 can be implemented independently as anapplication or a service that is external to a system, such as thesystem described above with reference to FIG. 1 . Likewise, in oneembodiment, the simulator application(s) 212 can be implemented as anapplication or a service provided by a system, such as the systemdescribed above with reference to FIG. 1 . Alternatively, the simulatorapplication(s) 212 can be implemented independently as an application ora service that is external to a system, such as the system describedabove with reference to FIG. 1 . As such, the asset simulator module 210and the simulator application(s) 212 can be implemented together orseparately in accordance with any of the above-describedimplementations.

Together, the asset simulator module 210 and the simulatorapplication(s) 212 can be implemented to process asset records, alongwith links between asset records to other types of records that areprovided from the asset record linking module 208 or the database system206, to generate interactive UI simulation data that can either bedirectly used or processed to generate simulated representations ofassets, as well as user interactions with the simulated representationsof the assets when processed in conjunction with data provided from theexternal sources 216. For instance, the interactive UI simulations caninclude representations of the assets including representations that aregenerated using virtual or augmented reality technologies.

In one embodiment, one or more of the asset simulator module 210 and thesimulator application(s) 212 can be implemented to generate, based onasset records and/or user input(s), simulations of assets usingaugmented/virtual reality technologies to generate a customer experience(including various user interfaces and interactions therewith). Thecustomer experience can include simulated representations of assets,including physical representations of the assets that are viewable byand interactable with a user. For example, in one embodiment, thevirtual and/or augmented versions of the customer experience can includethe assets to demonstrate simulated physically visible representationsof the locations of the assets to an end user within the context of anenvironment being observed/viewed along with different indicia ofpossible interactions with each asset within the environment (with orwithout sound) as it is being interacted with by a user. Representationsin any other known context can also be included.

As one example, the asset simulator module 210 and simulatorapplication(s) 212 can process assets records and various humanactivities and/or interactions with assets that correspond to thoseasset records to simulate a customer experience with those assets. Inone embodiment, virtual or augmented versions of simulated physicalrepresentations of the assets can be generated. The assets can besimulated and supplemented using virtual or augmented reality techniquesand technologies to generate simulated versions of the assets to createan interactive customer experience (e.g., UI and correspondinginteractions) that allow a user to interact with the assets in a virtualspace and discover information about the assets (including informationthat is part of linked records within the cloud-based computing system205.

As used herein, virtual reality can refer to a simulated experience thatcan be similar to or completely different from the real world. Virtualreality systems can generate realistic images, sounds and othersensations that simulate a user's physical presence in a virtualenvironment. A person using virtual reality equipment is able to lookaround the artificial world, move around in it, and interact withvirtual features or items such as assets. For instance, this effect canbe created by VR headset that includes a head-mounted display with asmall screen in front of the eyes. Virtual reality may incorporateauditory and video feedback, but may also allow other types of sensoryand force feedback through haptic technology.

As used herein, augmented reality can refer to the integration ofdigital information with the user's environment in real time. Augmentedreality technologies can be used, for example, to superimpose acomputer-generated image on a user's view of the real world, thusproviding a composite view. Unlike virtual reality, which creates atotally artificial environment, augmented reality uses the existingenvironment and overlays new information on top of it. In oneimplementation, AR can blend what a user sees in their real surroundingswith digital content generated by computer software. The additionalsoftware-generated images with a virtual scene typically enhance how thereal surroundings look in some way. AR systems can, for example, layervirtual information over a camera live feed into a headset orsmartglasses or through a mobile device giving the user the ability toview three-dimensional images. Mixed reality (MR) is the merging of thereal world and virtual worlds to produce new environments andvisualizations where physical and digital objects co-exist and interactin real time.

Pertinent data can be displayed using virtual and/or augmented realityat a display to provide supplemental information to a user. As usedherein, the phrase “using augmented reality” when used in conjunctionwith the term display or displaying can mean “presenting supplementalinformation via a graphical user interface.” For instance, in onecontext, the phrase “using augmented reality” when used in conjunctionwith the term display or displaying can mean “superimposing acomputer-generated image or information on a view presented on agraphical user interface to provide a composite view that includes thecomputer-generated image or information in a view that is presented.”

In one embodiment, supplemental information can be retrieved anddisplayed. The disclosed embodiments can leverage various augmentedreality technologies to display pertinent data or supplementalinformation about what is being observed via a display associated with auser system. The pertinent data or supplemental information can beretrieved from data sources such as backend databases, backend serversystems, cloud computing platforms, targets identified by search engines(such as Google Images service or Goggle reverse image search feature ofGoogle Images service), social media platforms or services, and providedto the user system. The disclosed embodiments can simplify retrieval anddisplay of information which would otherwise require access to multiplesystems and many manual steps. In one embodiment, recognition processingcan be performed locally at a device in parallel with image capture andother processing such that the disclosed methodologies can occur in nearreal-time (e.g., so that the user perceives a smooth view with nostuttering to the display).

For example, in one embodiment, the asset simulator module 210 canprocess asset records, along with links between asset records to othertypes of records that are provided from the asset management module 204or the database system 206, to generate interactive UI simulation datathat can either be directly used, or processed via the simulatorapplication(s) 212, to generate simulated representations of assets, aswell as user interactions with the simulated representations of theassets when processed in conjunction with data provided from theexternal sources 216. In one embodiment, the simulator application(s)212 can process information provided from the database system 206, theasset simulator module 210 and/or the external sources 216 to generatedifferent interactive UI simulations that include virtual or augmentedrepresentations of the assets. This can allow a user to dynamicallyinteract with various assets via a UI, and/or allow a user tointeractively view representations of other's interactions with variousassets via a simulation presented via a UI.

In one embodiment, the simulator application(s) 212 can includerecognition systems and databases that can vary depending on theimplementation and can include, for example, text recognition systemsand databases, image recognition systems and databases, landmarkrecognition systems and databases, and any other known type ofrecognition systems and databases. The simulator application(s) 212 canprocess information from external sources 216. The data sources caninclude various different types of data sources that can be used toprovide information and data that can be used to supplement otherinformation that is displayed and/or identified. The one or moreexternal sources 216 can include any number of backend systems includingserver systems and databases, cloud-based computing platforms, searchengines, targeted data sources identified by search engines, socialmedia platforms or services, open government data, etc. A cloud-basedcomputing platform can include a network interface that allows a user ofa user system to establish a communicative connection to the cloud-basedcomputing platform over a network such as the Internet or any type ofnetwork described herein. The cloud-based computing platform includes anapplication platform that can give user systems access to variousapplications and database systems provided by the application platformvia a cloud-based user interface. Examples of backend systems caninclude, for example, an on-premises exchange server, the system/serversused by a search engine (e.g., Google) to allow users to performsearches, the system/server used to retrieve information based on userinput, etc. Each backend system can include one or more servers thatwork in conjunction with one or more databases and/or data processingcomponents. Each of the recognition systems, databases, and externalsources 216 can be implemented using any number of servers (or serversystems) and databases, repositories or other data storage systems thatprovide data and/or services to the user systems. Each of therecognition systems, databases, and external sources 216 can beimplemented using physical and/or virtual database server hardware orcomputer systems that are configured to communicate with user systems toperform the various functions described herein.

Each of the recognition systems, databases and external sources 216 canoperate with any sort of conventional processing hardware, such as aprocessor, memory, input/output features and the like. The processorsmay be implemented using any suitable processing system, such as one ormore processors, controllers, microprocessors, microcontrollers,processing cores and/or other computing resources spread across anynumber of distributed or integrated systems, including any number of“cloud-based” or other virtual systems. Memory represents anynon-transitory short or long-term storage or other computer-readablemedia capable of storing programming instructions for execution on theprocessor, including any sort of random-access memory (RAM), read onlymemory (ROM), flash memory, magnetic or optical mass storage, and/or thelike. The computer-executable programming instructions, when read andexecuted by the servers and/or processors, cause the server and/orprocessor to create, generate, or otherwise facilitate providing dataand information as described herein. It should be noted that the memoryrepresents one suitable implementation of such computer-readable media,and alternatively or additionally, a server could receive and cooperatewith external computer-readable media that is realized as a portable ormobile component or platform, e.g., a portable hard drive, a USB flashdrive, an optical disc, or the like. The input/output features generallyrepresent the interface(s) to networks (e.g., any other local area, widearea or other network), mass storage, display devices, data entrydevices and/or the like.

In one embodiment, the action generator module 214 can be implemented asan application or a service provided by a system, such as the systemdescribed above with reference to FIG. 1 . Alternatively, the actiongenerator module 214 can be implemented independently as an applicationor a service that is external to a system, such as the system describedabove with reference to FIG. 1 . The action generator module 214 cangenerate various actions in response to interaction with assets. Theaction generator module 214 can generate and trigger various actionsbased on information provided from the asset management module 204, theasset simulator module 210, the simulator application(s) 212 and/orexternal sources 216. A few non-limiting examples of actions that can betriggered include: triggering various workflows within the cloud-basedcomputing system 205; triggering the creation of new records within thecloud-based computing system 205 that are linked to the assets recordsthat the user is interacting with; triggering generation ofnotifications/alerts to the user or others about the asset(s) beinginteracted with, etc. In one embodiment, the action generator module 214can use the asset records to create interactive UIs. Interaction withthe UIs can trigger various actions in response to a user interactingwith any UI that includes information about the assets. These are a fewof many possible actions that can be triggered in response to a userinteracting with assets (and possibly other linked records).

FIGS. 4, 6 and 8 are flow charts that illustrates examples of variousmethods in accordance with the disclosed embodiments. With respect toFIGS. 4, 6 and 8 , the steps of each method shown are not necessarilylimiting. Steps can be added, omitted, and/or performed simultaneouslywithout departing from the scope of the appended claims. Each method mayinclude any number of additional or alternative tasks, and the tasksshown need not be performed in the illustrated order. Each method may beincorporated into a more comprehensive procedure or process havingadditional functionality not described in detail herein. Moreover, oneor more of the tasks shown could potentially be omitted from anembodiment of each method as long as the intended overall functionalityremains intact.

Further, each method shown in FIGS. 4, 6 and 8 is computer-implementedin that various tasks or steps that are performed in connection witheach method may be performed by software, hardware, firmware, or anycombination thereof. For illustrative purposes, the followingdescription of each method may refer to elements mentioned above inconnection with FIGS. 1-3, 5, and 7 . In certain embodiments, some orall steps of this process, and/or substantially equivalent steps, areperformed by execution of processor-readable instructions stored orincluded on a processor-readable medium. For instance, in thedescription of FIGS. 4, 6 and 8 that follows, the system 100, thedynamic asset management system 200, the dynamic asset creation andmanagement system 300, the asset simulation system 500 and the actiongenerator system 700 (and any components of the system 100, the dynamicasset management system 200, the dynamic asset creation and managementsystem 300, the asset simulation system 500 and the action generatorsystem 700) are described as performing various acts, tasks or steps,but it should be appreciated that this refers to processing system(s) ofthese entities executing instructions to perform those various acts,tasks or steps. Depending on the implementation, some of the processingsystem(s) can be centrally located, or distributed among a number ofserver systems that work together. Furthermore, in the description ofFIGS. 4, 6 and 8 , a particular example is described in which a usersystem performs certain actions by interacting with other elements ofthe system 100, the dynamic asset management system 200, the dynamicasset creation and management system 300, the asset simulation system500 and the action generator system 700.

FIG. 3 is a block diagram that illustrates a dynamic asset creation andmanagement system 300 in accordance with the disclosed embodiments. Inparticular, FIG. 3 illustrates the asset record generator module 202,the cloud-based computing system 205, the database system 206 and theasset record linking module 208 of the dynamic asset management system200 of FIG. 2 . FIG. 4 is a flow chart that illustrates a method 400 forautomatically generating asset records and linking the asset records toother records that are stored and maintained at the database system 206of the cloud-based computing system 205 in accordance with the disclosedembodiments. FIG. 4 will be described below with reference to variouselements of FIG. 3 .

At 402, the collection module 302 can gather or collect assetinformation/data from sources of information and data regarding assetsor a representation of assets (e.g., physical objects). The sources 301of information and data regarding assets can include, but are notlimited to, images, blueprints, XML, files, manual configurationinformation, API, vision detection data, and other sources. At 404, thecollection module 302 can send asset information/data to an asset APIendpoint 304, which in turn can provide the asset information/data tothe asset type analysis module 306. At 406, the asset type analysismodule 306 can process the asset information and data to detect assets,and analyze the asset information and data for each of the detectedassets to determine an asset type for each detected asset (i.e., that itdetected from the asset information and data).

At 408, the extraction module 308 can extract pertinent headerinformation for each detected asset based on an asset type of thatdetected asset. The pertinent header information for each detected assetcan include, for example the asset information for that detected assetand associated properties of that detected asset.

At 410, the asset record generator module 310 can generate an assetrecord for each detected asset, and register and store the generatedasset records at the database system 206 of the cloud-based computingsystem 205 (e.g., a cloud computing platform such as Salesforce.com®).For instance, in one implementation, the asset record generator module310 can create and store (e.g., via an API) the generated asset recordsfor each detected asset as a row in an asset object of the databasesystem of the cloud-based computing system 205, where each asset recordfor each detected asset can include pertinent header information forthat detected asset such as asset information and data for that detectedasset and associated properties of that detected asset.

At 412, the asset record linking module 208 can link asset records toother types of custom/standard records are stored the database systemdatabase system 206 of the cloud-based computing system 205. Forexample, in one embodiment, the asset record linking module 208 candetermine other types of custom records or standard records that arestored at the database system of the cloud-based computing system andassociated with each of the generated asset records, and then link eachgenerated asset record to the other types of custom records or standardrecords that are determined to be associated with that generated assetrecord.

FIG. 5 is a block diagram that illustrates an asset simulation system500 in accordance with the disclosed embodiments. In particular, FIG. 5illustrates the cloud-based computing system 205, the database system206, the asset simulator module 210, the simulator application(s) 212,and the external sources 216 of the dynamic asset management system 200of FIG. 2 , as well as one or more user system(s) 140 that can interactwith the cloud-based computing system 205 and the simulatorapplication(s) 212. FIG. 6 is a flow chart that illustrates a simulationmethod 600 for generating simulations of assets based on asset recordsusing augmented/virtual reality in accordance with the disclosedembodiments. In other words, the method 600 can be used to generate aninteractive simulation representing one or more assets based on one ormore asset records that were automatically generated by an asset recordgenerator module and stored at the database system of the cloud-basedcomputing system. FIG. 6 will be described below with reference tovarious elements of FIG. 5 .

At 602, the asset simulator module 210 can generate simulatedrepresentations of assets based on information/data from the assetrecords stored in the database system 206.

At 604, the simulator application(s) 212 can supplement and augment thesimulated representations of the assets with additional information fromthe asset records stored in the database system. This can be done usinginformation from other types of records that are stored and maintainedat the database system 206, and/or using information provided by theexternal sources 216 (including those described above with reference toFIG. 2 ). In one embodiment, the simulator application(s) 212 cansupplement and/or augment the simulated representations of the assetsusing virtual reality (VR) module 502 for generating and combining realworld images with virtual images or entities that represent real-worldobjects simulated via a computer, and/or augmented reality (AR) module504 that augments simulated representations of the assets withadditional information. In some implementations, virtual reality systemscan generate a UI having a field of view that is either completelycomputer-generated, or may include real-world scenery as background, orthat use portions of real-world images (e.g., a particular object,pattern, or texture) incorporated into a computer-generated environment,and/or that incorporate virtual images into real-world scenes.

For example, in one embodiment, the simulator application can generate avirtual simulation that includes the simulated representations of assetsvia a virtual reality (VR) module by combining real world images withvirtual images or entities that represent real-world objects simulatedvia a computer to present the user interface (e.g., where the userinterface a field of view that presents the virtual simulation thatincorporates the simulated representations of assets with real-worldimages to present virtual images of the simulated representations ofassets). In another embodiment, the augmented reality (AR) module cangenerate a user interface that presents an augmented simulation with thesimulated representations of the assets along with the additionalinformation that supplements or augments the simulated representationsof the assets. For example, in some embodiments, this additionalinformation can be extracted from the asset records stored in thedatabase system; other additional information from other records(including those having different record types) stored in the databasesystem; and one or more sources that are external to the cloud-basedcomputing system. In another embodiment, the presentation approachesdescribed above may be combined.

At 605, the simulator application(s) 212 can generate a user interfacethat presents an interactive simulation of the assets. In oneimplementation, the user interface can include the simulatedrepresentations of the assets with the additional information from theasset records stored in the database system. In another implementation,the simulated representations of the assets can include additionalinformation from the asset records stored in the database system andinformation about other standard or custom records stored in thedatabase system that have been linked to the asset records by an assetrecord linking module.

At 606, a customer experience builder and simulator module 506 of thesimulator application(s) 212 can build or load a customer experienceusing the supplemented/augmented versions of the simulated physicalrepresentations of the assets. As used herein, a “customer experience”can refer to a user's overall interaction with the asset.

At 608, the simulator application(s) 212 can receive data regardinghuman activities or interactions with assets, and then process humanactivities and/or interactions with assets to simulate the customerexperience via a UI by providing and presenting virtual and augmentedversions of the assets via the UI. The virtual and augmented versions ofthe assets can show, demonstrate or otherwise present simulated physicalrepresentations of the assets. In one embodiment, at step 608, thesimulator application(s) 212 can process inputs received from usersystem(s) 140, where the inputs can reflect humanactivities/interactions with assets to simulate a customer experience.Again, the customer experience can provide or present virtual andaugmented versions of the assets.

FIG. 7 is a block diagram that illustrates an action generator system700 in accordance with the disclosed embodiments. In particular, FIG. 7illustrates the cloud-based computing system 205, the database system206, the action generator module 214, and the external sources 216 ofthe dynamic asset management system 200 of FIG. 2 , as well as one ormore user system(s) 140 that can interact with the cloud-based computingsystem 205, the database system 206 and the action generator module 214.FIG. 8 is a flow chart that illustrates a method 800 for generating ortriggering actions in response to human activities/interactions withassets and/or asset records in accordance with the disclosedembodiments. FIG. 8 will be described below with reference to variouselements of FIG. 7 including an asset interaction detector 702, acontext generator 704 and an action engine 706 of the action generatormodule 214 of FIG. 7 .

At 802, the asset interaction detector 702 can detect human activitiesand/or interactions with an asset and data regarding human activitiesand/or interactions with the asset. In response to information that isindicative of the interaction with the asset and/or data regarding humanactivities and/or interactions with the asset, at 804, at least someinformation from an asset record (related to the asset) can be accessedand retrieved from the database system 206 of the cloud-based computingsystem 205 and processed to generate context information. For example,in one embodiment, the information from the asset record comprisesheader information from one or more asset record(s) for that asset, andcontext generator 704 can process the retrieved header information fromthe asset record and the information that is indicative of theinteraction with the asset to generate context information. The contextinformation can be pulled from the database system 206 and/or otherexternal sources 216. Examples of context information can include thingssuch as customer demographics, customer type, asset type, CRMinformation, rules (e.g., safety, conflict, etc.), other data from otherexternal sources 216, etc. The context information can be pulled fromthe database system 206 and/or other external sources 216. Examples ofcontext information can include things such as customer demographics,customer type, asset type, CRM information, rules (e.g., safety,conflict, etc.), other data from other external sources 216, etc.

In one embodiment, at 806, the action engine 706 can use contextualrules to process the context information and the information that isindicative of the interaction with the asset to generate at least oneaction in response to the information that is indicative of theinteraction with the asset. In other words, the action engine 706 canprocess, using contextual rules, the context information and optionallydata regarding the human activities/interactions with the asset totrigger actions associated with those human activities/interactions withassets. The actions that are triggered can vary depending on theimplementation. The examples at 808, 810, 812 and 814 are non-limitingexamples of different actions that can be triggered.

For example, in one embodiment, at 808, in response to the informationthat is indicative of the interaction with the asset, at least oneworkflow can be triggered in response to that interaction. For instance,at 808, as a result of the processing performed at 806, the actionengine 706 can trigger automated processes or workflows that may (or maynot) be associated with those human activities/interactions with assets.In one embodiment, a “workflow” can refer to an automated businessprocess that can be specified using any number of workflow rules. As onenon-limiting example, a workflow can refer to business logic thatevaluates records (e.g., as they are created and updated) and determinesif an automated action needs to occur. For instance, workflow rules canbe defined that allow for certain things to be automatically done whencertain customized criteria defined by that rule are satisfied, such as,sending an email, assigning or updating or creating a task, updatingfields, etc.

In one implementation, a workflow can refer to a container or businesslogic engine which automates certain actions when particular criteriaare satisfied. If the criteria are true, then immediate actions can beexecuted (e.g., immediately when the record is created or edited) ortime-dependent actions can be executed (e.g., after a certain durationof time and all of the rule's criteria are still met). When any criteriaare false, a record can be saved but no action will get executed. Inthis regard, criteria can refer to any condition that needs to besatisfied before an action is automatically executed. Each workflow rulecan cause a workflow action when designated conditions of that workflowrule are met. In other words, a workflow rule can set workflow actionsinto motion when its designated conditions are met (e.g., a workflowaction fires when the conditions of a workflow rule are met). A workflowaction or “action” can refer to anything that automatically occurs whenthe criteria of the rule are satisfied. In one embodiment, workflowactions can be configured to execute immediately when a record meets theconditions in the workflow rule, or to set time triggers that executethe workflow actions at a specific day or time.

In another embodiment, at 810, in response to the information that isindicative of the interaction with the asset, the action generatormodule can create at least one new record within the database systemthat is associated with the asset record for the asset. For example, asa result of the processing performed at 806, the action engine 706 cantrigger creation of other records at the database system 206. The otherrecords that are created may (or may not) be associated with the assetrecord, or may be other record types that may (or may not) be associatedwith asset record, or may be other asset records.

In another embodiment, at 812, in response to the information that isindicative of the interaction with the asset, the action generatormodule can generate notifications, alerts, warning messages, etc. andsend them to a user system. These messages can indicate informationabout the asset being interacted with. For instance, as a result of theprocessing performed at 806, the action engine 706 can triggergeneration of notifications, alerts, warnings, etc. that can be sent touser systems of users such as customers, service personnel,administrators, management, etc. Depending on the implementation, thenotifications, alerts, warnings, etc. that are generated may (or maynot) be associated with the asset record.

In another embodiment, at 814, the action generator module can generate,in response to the information that is indicative of the interactionwith the asset, at least one interactive user interface, and display itat a user system. The at least one interactive user interface caninclude information about the asset, and can be generated based on theasset record or other records related to the asset record. In oneimplementation, at 814, the interactive user interface can includeincludes information about the asset and information from other records.In response to another interaction with the user interface, the actiongenerator module can generate another action in response to that otherinteraction.

The following description is of one example of a system in which thefeatures described above may be implemented. The components of thesystem described below are merely one example and should not beconstrued as limiting. The features described above with respect toFIGS. 1-8 may be implemented in any other type of computing environment,such as one with multiple servers, one with a single server, amulti-tenant server environment, a single-tenant server environment, orsome combination of the above.

FIG. 9 shows a block diagram of an example of an environment 910 inwhich an on-demand database service can be used in accordance with someimplementations. The environment 910 includes user systems 912, anetwork 914, a database system 916 (also referred to herein as a“cloud-based system”), a processor system 917, an application platform918, a network interface 920, tenant database 922 for storing tenantdata 923, system database 924 for storing system data 925, program code926 for implementing various functions of the system 916, and processspace 928 for executing database system processes and tenant-specificprocesses, such as running applications as part of an applicationhosting service. In some other implementations, environment 910 may nothave all of these components or systems, or may have other components orsystems instead of, or in addition to, those listed above.

In some implementations, the environment 910 is an environment in whichan on-demand database service exists. An on-demand database service,such as that which can be implemented using the system 916, is a servicethat is made available to users outside of the enterprise(s) that own,maintain or provide access to the system 916. As described above, suchusers generally do not need to be concerned with building or maintainingthe system 916. Instead, resources provided by the system 916 may beavailable for such users' use when the users need services provided bythe system 916; that is, on the demand of the users. Some on-demanddatabase services can store information from one or more tenants intotables of a common database image to form a multi-tenant database system(MTS). The term “multi-tenant database system” can refer to thosesystems in which various elements of hardware and software of a databasesystem may be shared by one or more customers or tenants. For example, agiven application server may simultaneously process requests for a greatnumber of customers, and a given database table may store rows of datasuch as feed items for a potentially much greater number of customers. Adatabase image can include one or more database objects. A relationaldatabase management system (RDBMS) or the equivalent can execute storageand retrieval of information against the database object(s).

Application platform 918 can be a framework that allows the applicationsof system 916 to execute, such as the hardware or softwareinfrastructure of the system 916. In some implementations, theapplication platform 918 enables the creation, management and executionof one or more applications developed by the provider of the on-demanddatabase service, users accessing the on-demand database service viauser systems 912, or third party application developers accessing theon-demand database service via user systems 912.

In some implementations, the system 916 implements a web-based customerrelationship management (CRM) system. For example, in some suchimplementations, the system 916 includes application servers configuredto implement and execute CRM software applications as well as providerelated data, code, forms, renderable web pages and documents and otherinformation to and from user systems 912 and to store to, and retrievefrom, a database system related data, objects, and Web page content. Insome MTS implementations, data for multiple tenants may be stored in thesame physical database object in tenant database 922. In some suchimplementations, tenant data is arranged in the storage medium(s) oftenant database 922 so that data of one tenant is kept logicallyseparate from that of other tenants so that one tenant does not haveaccess to another tenant's data, unless such data is expressly shared.The system 916 also implements applications other than, or in additionto, a CRM application. For example, the system 916 can provide tenantaccess to multiple hosted (standard and custom) applications, includinga CRM application. User (or third party developer) applications, whichmay or may not include CRM, may be supported by the application platform918. The application platform 918 manages the creation and storage ofthe applications into one or more database objects and the execution ofthe applications in one or more virtual machines in the process space ofthe system 916.

According to some implementations, each system 916 is configured toprovide web pages, forms, applications, data and media content to user(client) systems 912 to support the access by user systems 912 astenants of system 916. As such, system 916 provides security mechanismsto keep each tenant's data separate unless the data is shared. If morethan one MTS is used, they may be located in close proximity to oneanother (for example, in a server farm located in a single building orcampus), or they may be distributed at locations remote from one another(for example, one or more servers located in city A and one or moreservers located in city B). As used herein, each MTS could include oneor more logically or physically connected servers distributed locally oracross one or more geographic locations. Additionally, the term “server”is meant to refer to a computing device or system, including processinghardware and process space(s), an associated storage medium such as amemory device or database, and, in some instances, a databaseapplication (for example, OODBMS or RDBMS) as is well known in the art.It should also be understood that “server system” and “server” are oftenused interchangeably herein. Similarly, the database objects describedherein can be implemented as part of a single database, a distributeddatabase, a collection of distributed databases, a database withredundant online or offline backups or other redundancies, etc., and caninclude a distributed database or storage network and associatedprocessing intelligence.

The network 914 can be or include any network or combination of networksof systems or devices that communicate with one another. For example,the network 914 can be or include any one or any combination of a LAN(local area network), WAN (wide area network), telephone network,wireless network, cellular network, point-to-point network, starnetwork, token ring network, hub network, or other appropriateconfiguration. The network 914 can include a TCP/IP (Transfer ControlProtocol and Internet Protocol) network, such as the global internetworkof networks often referred to as the “Internet” (with a capital “I”).The Internet will be used in many of the examples herein. However, itshould be understood that the networks that the disclosedimplementations can use are not so limited, although TCP/IP is afrequently implemented protocol.

The user systems 912 can communicate with system 916 using TCP/IP and,at a higher network level, other common Internet protocols tocommunicate, such as HTTP, FTP, AFS, WAP, etc. In an example where HTTPis used, each user system 912 can include an HTTP client commonlyreferred to as a “web browser” or simply a “browser” for sending andreceiving HTTP signals to and from an HTTP server of the system 916.Such an HTTP server can be implemented as the sole network interface 920between the system 916 and the network 914, but other techniques can beused in addition to or instead of these techniques. In someimplementations, the network interface 920 between the system 916 andthe network 914 includes load sharing functionality, such as round-robinHTTP request distributors to balance loads and distribute incoming HTTPrequests evenly over a number of servers. In MTS implementations, eachof the servers can have access to the MTS data; however, otheralternative configurations may be used instead.

The user systems 912 can be implemented as any computing device(s) orother data processing apparatus or systems usable by users to access thedatabase system 916. For example, any of user systems 912 can be adesktop computer, a work station, a laptop computer, a tablet computer,a handheld computing device, a mobile cellular phone (for example, a“smartphone”), or any other Wi-Fi-enabled device, wireless accessprotocol (WAP)-enabled device, or other computing device capable ofinterfacing directly or indirectly to the Internet or other network. Theterms “user system” and “computing device” are used interchangeablyherein with one another and with the term “computer.” As describedabove, each user system 912 typically executes an HTTP client, forexample, a web browsing (or simply “browsing”) program, such as a webbrowser based on the WebKit platform, Microsoft's Internet Explorerbrowser, Netscape's Navigator browser, Opera's browser, Mozilla'sFirefox browser, or a WAP-enabled browser in the case of a cellularphone, PDA or other wireless device, or the like, allowing a user (forexample, a subscriber of on-demand services provided by the system 916)of the user system 912 to access, process and view information, pagesand applications available to it from the system 916 over the network914.

Each user system 912 also typically includes one or more user inputdevices, such as a keyboard, a mouse, a trackball, a touch pad, a touchscreen, a pen or stylus or the like, for interacting with a graphicaluser interface (GUI) provided by the browser on a display (for example,a monitor screen, liquid crystal display (LCD), light-emitting diode(LED) display, among other possibilities) of the user system 912 inconjunction with pages, forms, applications and other informationprovided by the system 916 or other systems or servers. For example, theuser interface device can be used to access data and applications hostedby system 916, and to perform searches on stored data, and otherwiseallow a user to interact with various GUI pages that may be presented toa user. As discussed above, implementations are suitable for use withthe Internet, although other networks can be used instead of or inaddition to the Internet, such as an intranet, an extranet, a virtualprivate network (VPN), a non-TCP/IP based network, any LAN or WAN or thelike.

The users of user systems 912 may differ in their respective capacities,and the capacity of a particular user system 912 can be entirelydetermined by permissions (permission levels) for the current user ofsuch user system. For example, where a salesperson is using a particularuser system 912 to interact with the system 916, that user system canhave the capacities allotted to the salesperson. However, while anadministrator is using that user system 912 to interact with the system916, that user system can have the capacities allotted to thatadministrator. Where a hierarchical role model is used, users at onepermission level can have access to applications, data, and databaseinformation accessible by a lower permission level user, but may nothave access to certain applications, database information, and dataaccessible by a user at a higher permission level. Thus, different usersgenerally will have different capabilities with regard to accessing andmodifying application and database information, depending on the users'respective security or permission levels (also referred to as“authorizations”).

According to some implementations, each user system 912 and some or allof its components are operator-configurable using applications, such asa browser, including computer code executed using a central processingunit (CPU) such as an Intel Pentium® processor or the like. Similarly,the system 916 (and additional instances of an MTS, where more than oneis present) and all of its components can be operator-configurable usingapplication(s) including computer code to run using the processor system917, which may be implemented to include a CPU, which may include anIntel Pentium® processor or the like, or multiple CPUs.

The system 916 includes tangible computer-readable media havingnon-transitory instructions stored thereon/in that are executable by orused to program a server or other computing system (or collection ofsuch servers or computing systems) to perform some of the implementationof processes described herein. For example, computer program code 926can implement instructions for operating and configuring the system 916to intercommunicate and to process web pages, applications and otherdata and media content as described herein. In some implementations, thecomputer code 926 can be downloadable and stored on a hard disk, but theentire program code, or portions thereof, also can be stored in anyother volatile or non-volatile memory medium or device as is well known,such as a ROM or RAM, or provided on any media capable of storingprogram code, such as any type of rotating media including floppy disks,optical discs, digital versatile disks (DVD), compact disks (CD),microdrives, and magneto-optical disks, and magnetic or optical cards,nanosystems (including molecular memory ICs), or any other type ofcomputer-readable medium or device suitable for storing instructions ordata. Additionally, the entire program code, or portions thereof, may betransmitted and downloaded from a software source over a transmissionmedium, for example, over the Internet, or from another server, as iswell known, or transmitted over any other existing network connection asis well known (for example, extranet, VPN, LAN, etc.) using anycommunication medium and protocols (for example, TCP/IP, HTTP, HTTPS,Ethernet, etc.) as are well known. It will also be appreciated thatcomputer code for the disclosed implementations can be realized in anyprogramming language that can be executed on a server or other computingsystem such as, for example, C, C++, HTML, any other markup language,Java™, JavaScript, ActiveX, any other scripting language, such asVBScript, and many other programming languages as are well known may beused. (Java™ is a trademark of Sun Microsystems, Inc.).

FIG. 10 shows a block diagram of example implementations of elements ofFIG. 9 and example interconnections between these elements according tosome implementations. That is, FIG. 10 also illustrates environment 910,but FIG. 10 , various elements of the system 916 and variousinterconnections between such elements are shown with more specificityaccording to some more specific implementations. Elements from FIG. 9that are also shown in FIG. 10 will use the same reference numbers inFIG. 10 as were used in FIG. 9 . Additionally, in FIG. 10 , the usersystem 912 includes a processor system 1012A, a memory system 1012B, aninput system 1012C, and an output system 1012D. The processor system1012A can include any suitable combination of one or more processors.The memory system 1012B can include any suitable combination of one ormore memory devices. The input system 1012C can include any suitablecombination of input devices, such as one or more touchscreeninterfaces, keyboards, mice, trackballs, scanners, cameras, orinterfaces to networks. The output system 1012D can include any suitablecombination of output devices, such as one or more display devices,printers, or interfaces to networks.

In FIG. 10 , the network interface 920 of FIG. 9 is implemented as a setof HTTP application servers 10001-1000N. Each application server 1000,also referred to herein as an “app server,” is configured to communicatewith tenant database 922 and the tenant data 1023 therein, as well assystem database 924 and the system data 1025 therein, to serve requestsreceived from the user systems 1012. The tenant data 1023 can be dividedinto individual tenant storage spaces 1013, which can be physically orlogically arranged or divided. Within each tenant storage space 1013,tenant data 1014 and application metadata 1016 can similarly beallocated for each user. For example, a copy of a user's most recentlyused (MRU) items can be stored to user storage 1014. Similarly, a copyof MRU items for an entire organization that is a tenant can be storedto tenant storage space 1013.

The process space 928 includes system process space 1002, individualtenant process spaces 1004 and a tenant management process space 1010.The application platform 918 includes an application setup mechanism1038 that supports application developers' creation and management ofapplications. Such applications and others can be saved as metadata intotenant database 922 by save routines 1036 for execution by subscribersas one or more tenant process spaces 1004 managed by tenant managementprocess 1010, for example. Invocations to such applications can be codedusing PL/SOQL 1034, which provides a programming language styleinterface extension to API 1032. A detailed description of some PL/SOQLlanguage implementations is discussed in commonly assigned U.S. Pat. No.7,730,478, titled METHOD AND SYSTEM FOR ALLOWING ACCESS TO DEVELOPEDAPPLICATIONS VIA A MULTI-TENANT ON-DEMAND DATABASE SERVICE, by CraigWeissman, issued on Jun. 1, 2010, and hereby incorporated by referencein its entirety and for all purposes. Invocations to applications can bedetected by one or more system processes, which manage retrievingapplication metadata 816 for the subscriber making the invocation andexecuting the metadata as an application in a virtual machine.

The system 916 of FIG. 10 also includes a user interface (UI) 1030 andan application programming interface (API) 1032 to system 916 residentprocesses to users or developers at user systems 1012. In some otherimplementations, the environment 910 may not have the same elements asthose listed above or may have other elements instead of, or in additionto, those listed above.

Each application server 1000 can be communicably coupled with tenantdatabase 922 and system database 924, for example, having access totenant data 1023 and system data 1025, respectively, via a differentnetwork connection. For example, one application server 10001 can becoupled via the network 914 (for example, the Internet), anotherapplication server 1000N can be coupled via a direct network link, andanother application server (not illustrated) can be coupled by yet adifferent network connection. Transfer Control Protocol and InternetProtocol (TCP/IP) are examples of typical protocols that can be used forcommunicating between application servers 1000 and the system 916.However, it will be apparent to one skilled in the art that othertransport protocols can be used to optimize the system 916 depending onthe network interconnections used.

In some implementations, each application server 1000 is configured tohandle requests for any user associated with any organization that is atenant of the system 916. Because it can be desirable to be able to addand remove application servers 1000 from the server pool at any time andfor various reasons, in some implementations there is no server affinityfor a user or organization to a specific application server 1000. Insome such implementations, an interface system implementing a loadbalancing function (for example, an F5 Big-IP load balancer) iscommunicably coupled between the application servers 1000 and the usersystems 1012 to distribute requests to the application servers 1000. Inone implementation, the load balancer uses a least-connections algorithmto route user requests to the application servers 1000. Other examplesof load balancing algorithms, such as round robin andobserved-response-time, also can be used. For example, in someinstances, three consecutive requests from the same user could hit threedifferent application servers 1000, and three requests from differentusers could hit the same application server 1000. In this manner, by wayof example, system 916 can be a multi-tenant system in which system 916handles storage of, and access to, different objects, data andapplications across disparate users and organizations.

In one example storage use case, one tenant can be a company thatemploys a sales force where each salesperson uses system 916 to manageaspects of their sales. A user can maintain contact data, leads data,customer follow-up data, performance data, goals and progress data,etc., all applicable to that user's personal sales process (for example,in tenant database 922). In an example of a MTS arrangement, because allof the data and the applications to access, view, modify, report,transmit, calculate, etc., can be maintained and accessed by a usersystem 1012 having little more than network access, the user can managehis or her sales efforts and cycles from any of many different usersystems. For example, when a salesperson is visiting a customer and thecustomer has Internet access in their lobby, the salesperson can obtaincritical updates regarding that customer while waiting for the customerto arrive in the lobby.

While each user's data can be stored separately from other users' dataregardless of the employers of each user, some data can beorganization-wide data shared or accessible by several users or all ofthe users for a given organization that is a tenant. Thus, there can besome data structures managed by system 916 that are allocated at thetenant level while other data structures can be managed at the userlevel. Because an MTS can support multiple tenants including possiblecompetitors, the MTS can have security protocols that keep data,applications, and application use separate. Also, because many tenantsmay opt for access to an MTS rather than maintain their own system,redundancy, up-time, and backup are additional functions that can beimplemented in the MTS. In addition to user-specific data andtenant-specific data, the system 916 also can maintain system level datausable by multiple tenants or other data. Such system level data caninclude industry reports, news, postings, and the like that are sharableamong tenants.

In some implementations, the user systems 1012 (which also can be clientsystems) communicate with the application servers 1000 to request andupdate system-level and tenant-level data from the system 916. Suchrequests and updates can involve sending one or more queries to tenantdatabase 922 or system database 924. The system 916 (for example, anapplication server 1000 in the system 916) can automatically generateone or more SQL statements (for example, one or more SQL queries)designed to access the desired information. System database 924 cangenerate query plans to access the requested data from the database. Theterm “query plan” generally refers to one or more operations used toaccess information in a database system.

Each database can generally be viewed as a collection of objects, suchas a set of logical tables, containing data fitted into predefined orcustomizable categories. A “table” is one representation of a dataobject, and may be used herein to simplify the conceptual description ofobjects and custom objects according to some implementations. It shouldbe understood that “table” and “object” may be used interchangeablyherein. Each table generally contains one or more data categorieslogically arranged as columns or fields in a viewable schema. Each rowor element of a table can contain an instance of data for each categorydefined by the fields. For example, a CRM database can include a tablethat describes a customer with fields for basic contact information suchas name, address, phone number, fax number, etc. Another table candescribe a purchase order, including fields for information such ascustomer, product, sale price, date, etc. In some MTS implementations,standard entity tables can be provided for use by all tenants. For CRMdatabase applications, such standard entities can include tables forcase, account, contact, lead, and opportunity data objects, eachcontaining pre-defined fields. As used herein, the term “entity” alsomay be used interchangeably with “object” and “table.”

In some MTS implementations, tenants are allowed to create and storecustom objects, or may be allowed to customize standard entities orobjects, for example by creating custom fields for standard objects,including custom index fields. Commonly assigned U.S. Pat. No.7,779,039, titled CUSTOM ENTITIES AND FIELDS IN A MULTI-TENANT DATABASESYSTEM, by Weissman et al., issued on Aug. 17, 2010, and herebyincorporated by reference in its entirety and for all purposes, teachessystems and methods for creating custom objects as well as customizingstandard objects in a multi-tenant database system. In someimplementations, for example, all custom entity data rows are stored ina single multi-tenant physical table, which may contain multiple logicaltables per organization. It is transparent to customers that theirmultiple “tables” are in fact stored in one large table or that theirdata may be stored in the same table as the data of other customers.

FIG. 11A shows a system diagram illustrating example architecturalcomponents of an on-demand database service environment 1100 accordingto some implementations. A client machine communicably connected withthe cloud 1104, generally referring to one or more networks incombination, as described herein, can communicate with the on-demanddatabase service environment 1100 via one or more edge routers 1108 and1112. A client machine can be any of the examples of user systems 12described above. The edge routers can communicate with one or more coreswitches 1120 and 1124 through a firewall 1116. The core switches cancommunicate with a load balancer 1128, which can distribute server loadover different pods, such as the pods 1140 and 1144. The pods 1140 and1144, which can each include one or more servers or other computingresources, can perform data processing and other operations used toprovide on-demand services. Communication with the pods can be conductedvia pod switches 1132 and 1136. Components of the on-demand databaseservice environment can communicate with database storage 1156 through adatabase firewall 1148 and a database switch 1152.

As shown in FIGS. 11A and 11B, accessing an on-demand database serviceenvironment can involve communications transmitted among a variety ofdifferent hardware or software components. Further, the on-demanddatabase service environment 1100 is a simplified representation of anactual on-demand database service environment. For example, while onlyone or two devices of each type are shown in FIGS. 11A and 11B, someimplementations of an on-demand database service environment can includeanywhere from one to several devices of each type. Also, the on-demanddatabase service environment need not include each device shown in FIGS.11A and 11B, or can include additional devices not shown in FIGS. 11Aand 11B.

Additionally, it should be appreciated that one or more of the devicesin the on-demand database service environment 1100 can be implemented onthe same physical device or on different hardware. Some devices can beimplemented using hardware or a combination of hardware and software.Thus, terms such as “data processing apparatus,” “machine,” “server” and“device” as used herein are not limited to a single hardware device,rather references to these terms can include any suitable combination ofhardware and software configured to provide the described functionality.

The cloud 1104 is intended to refer to a data network or multiple datanetworks, often including the Internet. Client machines communicablyconnected with the cloud 1104 can communicate with other components ofthe on-demand database service environment 1100 to access servicesprovided by the on-demand database service environment. For example,client machines can access the on-demand database service environment toretrieve, store, edit, or process information. In some implementations,the edge routers 1108 and 1112 route packets between the cloud 1104 andother components of the on-demand database service environment 1100. Forexample, the edge routers 1108 and 1112 can employ the Border GatewayProtocol (BGP). The BGP is the core routing protocol of the Internet.The edge routers 1108 and 1112 can maintain a table of IP networks or‘prefixes’, which designate network reachability among autonomoussystems on the Internet.

In some implementations, the firewall 1116 can protect the innercomponents of the on-demand database service environment 1100 fromInternet traffic. The firewall 1116 can block, permit, or deny access tothe inner components of the on-demand database service environment 1100based upon a set of rules and other criteria. The firewall 1116 can actas one or more of a packet filter, an application gateway, a statefulfilter, a proxy server, or any other type of firewall.

In some implementations, the core switches 1120 and 1124 arehigh-capacity switches that transfer packets within the on-demanddatabase service environment 1100. The core switches 1120 and 1124 canbe configured as network bridges that quickly route data betweendifferent components within the on-demand database service environment.In some implementations, the use of two or more core switches 1120 and1124 can provide redundancy or reduced latency.

In some implementations, the pods 1140 and 1144 perform the core dataprocessing and service functions provided by the on-demand databaseservice environment. Each pod can include various types of hardware orsoftware computing resources. An example of the pod architecture isdiscussed in greater detail with reference to FIG. 11 DDDD. In someimplementations, communication between the pods 1140 and 1144 isconducted via the pod switches 1132 and 1136. The pod switches 1132 and1136 can facilitate communication between the pods 1140 and 1144 andclient machines communicably connected with the cloud 1104, for examplevia core switches 1120 and 1124. Also, the pod switches 1132 and 1136may facilitate communication between the pods 1140 and 1144 and thedatabase storage 1156. In some implementations, the load balancer 1128can distribute workload between the pods 1140 and 1144. Balancing theon-demand service requests between the pods can assist in improving theuse of resources, increasing throughput, reducing response times, orreducing overhead. The load balancer 1128 may include multilayerswitches to analyze and forward traffic.

In some implementations, access to the database storage 1156 is guardedby a database firewall 1148. The database firewall 1148 can act as acomputer application firewall operating at the database applicationlayer of a protocol stack. The database firewall 1148 can protect thedatabase storage 1156 from application attacks such as structure querylanguage (SQL) injection, database rootkits, and unauthorizedinformation disclosure. In some implementations, the database firewall1148 includes a host using one or more forms of reverse proxy servicesto proxy traffic before passing it to a gateway router. The databasefirewall 1148 can inspect the contents of database traffic and blockcertain content or database requests. The database firewall 1148 canwork on the SQL application level atop the TCP/IP stack, managingapplications' connection to the database or SQL management interfaces aswell as intercepting and enforcing packets traveling to or from adatabase network or application interface.

In some implementations, communication with the database storage 1156 isconducted via the database switch 1152. The multi-tenant databasestorage 1156 can include more than one hardware or software componentsfor handling database queries.

Accordingly, the database switch 1152 can direct database queriestransmitted by other components of the on-demand database serviceenvironment (for example, the pods 1140 and 1144) to the correctcomponents within the database storage 1156. In some implementations,the database storage 1156 is an on-demand database system shared by manydifferent organizations as described above with reference to FIG. 1 ,FIG. 9 and FIG. 10 .

FIG. 11B shows a system diagram further illustrating examplearchitectural components of an on-demand database service environmentaccording to some implementations. The pod 1144 can be used to renderservices to a user of the on-demand database service environment 1100.In some implementations, each pod includes a variety of servers or othersystems. The pod 1144 includes one or more content batch servers 1164,content search servers 1168, query servers 1182, file force servers1186, access control system (ACS) servers 1180, batch servers 1184, andapp servers 1188. The pod 1144 also can include database instances 1190,quick file systems (QFS) 1192, and indexers 1194. In someimplementations, some or all communication between the servers in thepod 1144 can be transmitted via the switch 1136.

In some implementations, the app servers 1188 include a hardware orsoftware framework dedicated to the execution of procedures (forexample, programs, routines, scripts) for supporting the construction ofapplications provided by the on-demand database service environment 1100via the pod 1144. In some implementations, the hardware or softwareframework of an app server 1188 is configured to execute operations ofthe services described herein, including performance of the blocks ofvarious methods or processes described herein. In some alternativeimplementations, two or more app servers 1188 can be included andcooperate to perform such methods, or one or more other serversdescribed herein can be configured to perform the disclosed methods.

The content batch servers 1164 can handle requests internal to the pod.Some such requests can be long-running or not tied to a particularcustomer. For example, the content batch servers 1164 can handlerequests related to log mining, cleanup work, and maintenance tasks. Thecontent search servers 1168 can provide query and indexer functions. Forexample, the functions provided by the content search servers 1168 canallow users to search through content stored in the on-demand databaseservice environment. The file force servers 1186 can manage requests forinformation stored in the File force storage 1198. The File forcestorage 1198 can store information such as documents, images, and basiclarge objects (BLOBs). By managing requests for information using thefile force servers 1186, the image footprint on the database can bereduced. The query servers 1182 can be used to retrieve information fromone or more file storage systems. For example, the query system 1182 canreceive requests for information from the app servers 1188 and transmitinformation queries to the NFS 1196 located outside the pod.

The pod 1144 can share a database instance 1190 configured as amulti-tenant environment in which different organizations share accessto the same database. Additionally, services rendered by the pod 1144may call upon various hardware or software resources. In someimplementations, the ACS servers 1180 control access to data, hardwareresources, or software resources. In some implementations, the batchservers 1184 process batch jobs, which are used to run tasks atspecified times. For example, the batch servers 1184 can transmitinstructions to other servers, such as the app servers 1188, to triggerthe batch jobs.

In some implementations, the QFS 1192 is an open source file storagesystem available from Sun Microsystems® of Santa Clara, Calif. The QFScan serve as a rapid-access file storage system for storing andaccessing information available within the pod 1144. The QFS 1192 cansupport some volume management capabilities, allowing many disks to begrouped together into a file storage system. File storage systemmetadata can be kept on a separate set of disks, which can be useful forstreaming applications where long disk seeks cannot be tolerated. Thus,the QFS system can communicate with one or more content search servers1168 or indexers 1194 to identify, retrieve, move, or update data storedin the network file storage systems 1196 or other storage systems.

In some implementations, one or more query servers 1182 communicate withthe NFS 1196 to retrieve or update information stored outside of the pod1144. The NFS 1196 can allow servers located in the pod 1144 to accessinformation to access files over a network in a manner similar to howlocal storage is accessed. In some implementations, queries from thequery servers 1182 are transmitted to the NFS 1196 via the load balancer1128, which can distribute resource requests over various resourcesavailable in the on-demand database service environment. The NFS 1196also can communicate with the QFS 1192 to update the information storedon the NFS 1196 or to provide information to the QFS 1192 for use byservers located within the pod 1144.

In some implementations, the pod includes one or more database instances1190. The database instance 1190 can transmit information to the QFS1192. When information is transmitted to the QFS, it can be availablefor use by servers within the pod 1144 without using an additionaldatabase call. In some implementations, database information istransmitted to the indexer 1194. Indexer 1194 can provide an index ofinformation available in the database 1190 or QFS 1192. The indexinformation can be provided to file force servers 1186 or the QFS 1192.

FIG. 12 illustrates a diagrammatic representation of a machine in theexemplary form of a computer system 1200 within which a set ofinstructions, for causing the machine to perform any one or more of themethodologies discussed herein, may be executed. The system 1200 may bein the form of a computer system within which a set of instructions, forcausing the machine to perform any one or more of the methodologiesdiscussed herein, may be executed. In alternative embodiments, themachine may be connected (e.g., networked) to other machines in a LAN,an intranet, an extranet, or the Internet. The machine may operate inthe capacity of a server machine in client-server network environment.The machine may be a personal computer (PC), a set-top box (STB), aserver, a network router, switch or bridge, or any machine capable ofexecuting a set of instructions (sequential or otherwise) that specifyactions to be taken by that machine. Further, while only a singlemachine is illustrated, the term “machine” shall also be taken toinclude any collection of machines that individually or jointly executea set (or multiple sets) of instructions to perform any one or more ofthe methodologies discussed herein. In one embodiment, computer system1200 any of the blocks, components or entities shown in FIGS. 1-3, 5, 7and 9-11B.

The exemplary computer system 1200 includes a processing device(processor) 1202, a main memory 1204 (e.g., read-only memory (ROM),flash memory, dynamic random access memory (DRAM) such as synchronousDRAM (SDRAM)), a static memory 1206 (e.g., flash memory, static randomaccess memory (SRAM)), and a data storage device 1218, which communicatewith each other via a bus 1230.

Processing device 1202 represents one or more general-purpose processingdevices such as a microprocessor, central processing unit, or the like.More particularly, the processing device 1202 may be a complexinstruction set computing (CISC) microprocessor, reduced instruction setcomputing (RISC) microprocessor, very long instruction word (VLIW)microprocessor, or a processor implementing other instruction sets orprocessors implementing a combination of instruction sets. Theprocessing device 1202 may also be one or more special-purposeprocessing devices such as an application specific integrated circuit(ASIC), a field programmable gate array (FPGA), a digital signalprocessor (DSP), network processor, or the like.

The computer system 1200 may further include a network interface device1208. The computer system 1200 also may include a video display unit1210 (e.g., a liquid crystal display (LCD) or a cathode ray tube (CRT)),an alphanumeric input device 1212 (e.g., a keyboard), a cursor controldevice 1214 (e.g., a mouse), and a signal generation device 1216 (e.g.,a speaker).

The data storage device 1218 may include a computer-readable medium 1228on which is stored one or more sets of instructions 1222 (e.g.,instructions of in-memory buffer service 114) embodying any one or moreof the methodologies or functions described herein. The instructions1222 may also reside, completely or at least partially, within the mainmemory 1204 and/or within processing logic 1226 of the processing device1202 during execution thereof by the computer system 1200, the mainmemory 1204 and the processing device 1202 also constitutingcomputer-readable media. The instructions may further be transmitted orreceived over a network 1220 via the network interface device 1208.

While the computer-readable storage medium 1228 is shown in an exemplaryembodiment to be a single medium, the term “computer-readable storagemedium” should be taken to include a single medium or multiple media(e.g., a centralized or distributed database, and/or associated cachesand servers) that store the one or more sets of instructions. The term“computer-readable storage medium” shall also be taken to include anymedium that is capable of storing, encoding or carrying a set ofinstructions for execution by the machine and that cause the machine toperform any one or more of the methodologies of the present invention.The term “computer-readable storage medium” shall accordingly be takento include, but not be limited to, solid-state memories, optical media,and magnetic media.

The preceding description sets forth numerous specific details such asexamples of specific systems, components, methods, and so forth, inorder to provide a good understanding of several embodiments of thepresent invention. It will be apparent to one skilled in the art,however, that at least some embodiments of the present invention may bepracticed without these specific details. In other instances, well-knowncomponents or methods are not described in detail or are presented insimple block diagram format in order to avoid unnecessarily obscuringthe present invention. Thus, the specific details set forth are merelyexemplary. Particular implementations may vary from these exemplarydetails and still be contemplated to be within the scope of the presentinvention.

In the above description, numerous details are set forth. It will beapparent, however, to one of ordinary skill in the art having thebenefit of this disclosure, that embodiments of the invention may bepracticed without these specific details. In some instances, well-knownstructures and devices are shown in block diagram form, rather than indetail, in order to avoid obscuring the description.

Some portions of the detailed description are presented in terms ofalgorithms and symbolic representations of operations on data bitswithin a computer memory. These algorithmic descriptions andrepresentations are the means used by those skilled in the dataprocessing arts to most effectively convey the substance of their workto others skilled in the art. An algorithm is here, and generally,conceived to be a self-consistent sequence of steps leading to a desiredresult. The steps are those requiring physical manipulations of physicalquantities. Usually, though not necessarily, these quantities take theform of electrical or magnetic signals capable of being stored,transferred, combined, compared, and otherwise manipulated. It hasproven convenient at times, principally for reasons of common usage, torefer to these signals as bits, values, elements, symbols, characters,terms, numbers, or the like.

It should be borne in mind, however, that all of these and similar termsare to be associated with the appropriate physical quantities and aremerely convenient labels applied to these quantities. Unlessspecifically stated otherwise as apparent from the above discussion, itis appreciated that throughout the description, discussions utilizingterms such as “determining,” “analyzing,” “identifying,” “adding,” “displaying,” “generating,” “querying,” “creating,” “selecting” or thelike, refer to the actions and processes of a computer system, orsimilar electronic computing device, that manipulates and transformsdata represented as physical (e.g., electronic) quantities within thecomputer system's registers and memories into other data similarlyrepresented as physical quantities within the computer system memoriesor registers or other such information storage, transmission or displaydevices.

Embodiments of the invention also relate to an apparatus for performingthe operations herein. This apparatus may be specially constructed forthe required purposes (e.g., a special-purpose computer), or it maycomprise a general-purpose computer selectively activated orreconfigured by a computer program stored in the computer. Such acomputer program may be stored in a computer readable storage medium,such as, but not limited to, any type of disk including floppy disks,optical disks, CD-ROMs, and magnetic-optical disks, read-only memories(ROMs), random access memories (RAMs), EPROMs, EEPROMs, magnetic oroptical cards, or any type of media suitable for storing electronicinstructions.

The algorithms and displays presented herein are not inherently relatedto any particular computer or other apparatus. Various general-purposeor special-purpose systems may be used with programs in accordance withthe teachings herein, or it may prove convenient to construct a morespecialized apparatus to perform the required method steps. The requiredstructure for a variety of these systems will appear from thedescription below. In addition, the present invention is not describedwith reference to any particular programming language. It will beappreciated that a variety of programming languages may be used toimplement the teachings of the invention as described herein.

While at least one exemplary embodiment has been presented in theforegoing detailed description, it should be appreciated that a vastnumber of variations exist. It should also be appreciated that theexemplary embodiment or embodiments described herein are not intended tolimit the scope, applicability, or configuration of the claimed subjectmatter in any way. Rather, the foregoing detailed description willprovide those skilled in the art with a convenient road map forimplementing the described embodiment or embodiments. It should beunderstood that various changes can be made in the function andarrangement of elements without departing from the scope defined by theclaims, which includes known equivalents and foreseeable equivalents atthe time of filing this patent application.

What is claimed is:
 1. A method for generating an interactive simulationfor one or more assets, the method comprising: generating one or moresimulated representations associated with the one or more assets,wherein an asset of the one or more assets is a physical object locatedat a location within an environment; augmenting the one or moresimulated representations with supplemental information from an externalsource; and generating a user interface that presents the interactivesimulation of the one or more assets that comprises the one or moresimulated representations associated with the one or more assets withthe supplemental information, wherein user interaction with the asset ofthe one or more assets within the user interface triggers an actionassociated with a workflow.
 2. The method of claim 1, wherein theworkflow comprises business logic that evaluates a record associatedwith the asset at a cloud-based computing system to automate the actionat the cloud-based computing system.
 3. The method of claim 1, whereingenerating the user interface comprises providing augmented reality at adisplay that presents the interactive simulation comprising thesupplemental information overlaid on top of the environment.
 4. Themethod of claim 1, wherein generating the one or more simulatedrepresentations comprises providing indication of a possible interactionwith the asset within the environment.
 5. The method of claim 1, whereingenerating the user interface comprises generating the user interface ona head-mounted display.
 6. The method of claim 5, wherein the userinterface comprises augmented reality presenting the supplementalinformation overlaid on top of the environment.
 7. The method of claim5, wherein the user interface comprises indication of a possibleinteraction with the asset within the environment.
 8. The method ofclaim 1, wherein the action comprises an automated action with respectto a record associated with the asset at a cloud-based computing systemusing information that is indicative of the user interaction with theasset.
 9. The method of claim 1, wherein the action comprises generationof at least one of a notification, an alerts and a warning.
 10. Themethod of claim 1, wherein augmenting the one or more simulatedrepresentations comprises generating, via an augmented reality module,the user interface that presents an augmented simulation with the one ormore simulated representations associated with the one or more assetsalong with the supplemental information that supplements or augments theone or more simulated representations associated with the one or moreassets, wherein the supplemental information is extracted from a recordstored at the external source.
 11. At least one non-transitorycomputer-readable medium having instructions stored thereon that, whenexecuted by at least one processor, cause the at least one processor to:generate one or more simulated representations associated with one ormore assets, wherein an asset of the one or more assets is a physicalobject located at a location within an environment; augment the one ormore simulated representations with supplemental information from anexternal source; and generate a user interface that presents aninteractive simulation of the one or more assets that comprises the oneor more simulated representations associated with the one or more assetswith the supplemental information, wherein user interaction with theasset of the one or more assets within the user interface triggers anaction associated with a workflow.
 12. The at least one non-transitorycomputer-readable storage medium of claim 11, wherein the workflowcomprises business logic that evaluates a record associated with theasset at a cloud-based computing system to automate the action at thecloud-based computing system.
 13. The at least one non-transitorycomputer-readable storage medium of claim 11, wherein generating theuser interface comprises providing augmented reality at a display thatpresents the interactive simulation comprising the supplementalinformation overlaid on top of the environment.
 14. The at least onenon-transitory computer-readable storage medium of claim 11, whereingenerating the one or more simulated representations comprises providingindication of a possible interaction with the asset within theenvironment.
 15. The at least one non-transitory computer-readablestorage medium of claim 11, wherein generating the user interfacecomprises generating the user interface on a head-mounted display. 16.The at least one non-transitory computer-readable storage medium ofclaim 15, wherein the user interface comprises augmented realitypresenting the supplemental information overlaid on top of theenvironment.
 17. The at least one non-transitory computer-readablestorage medium of claim 15, wherein the user interface comprisesindication of a possible interaction with the asset within theenvironment.
 18. The at least one non-transitory computer-readablestorage medium of claim 11, wherein the action comprises an automatedaction with respect to a record associated with the asset at acloud-based computing system using information that is indicative of theuser interaction with the asset.
 19. The at least one non-transitorycomputer-readable storage medium of claim 11, wherein the actioncomprises generation of at least one of a notification, an alerts and awarning.
 20. A system comprising: at least one non-transitorycomputer-readable storage medium that stores processor-readableinstructions; and at least one processor, coupled to the at least onenon-transitory computer-readable storage medium, to execute theprocessor-readable instructions to: generate one or more simulatedrepresentations associated with one or more assets, wherein an asset ofthe one or more assets is a physical object located at a location withinan environment; augment the one or more simulated representations withsupplemental information from an external source; and generate a userinterface that presents an interactive simulation of the one or moreassets that comprises the one or more simulated representationsassociated with the one or more assets with the supplementalinformation, wherein user interaction with the asset of the one or moreassets within the user interface triggers an action associated with aworkflow.